Linux文件io

 r+ w+ r w a a+的区别

"r"(只读)

文件必须存在,否则fopen将失败。

只能从文件中读取数据,不能写入数据。

文件指针指向文件的开始位置。

"w"(只写,清空)

如果文件存在,其内容会被清空(即删除现有内容),即使文件没有被截断,也会变成一个空文件。

如果文件不存在,会创建一个新文件。

只能向文件写入数据,不能读取数据。

文件指针指向文件的开始位置。

"a"(追加)

如果文件存在,不会清空文件内容,而是将文件指针置于文件的末尾,准备在文件的末尾追加数据。

如果文件不存在,会创建一个新文件。

只能向文件写入数据,不能读取数据。

"r+"(读写)

文件必须存在,否则fopen将失败。

可以从文件中读取数据,也可以向文件写入数据。

文件指针指向文件的开始位置。

"w+"(读写,清空)

如果文件存在,其内容会被清空(即删除现有内容),即使文件没有被截断,也会变成一个空文件。

如果文件不存在,会创建一个新文件。

可以从文件中读取数据,也可以向文件写入数据。

文件指针指向文件的开始位置。

"a+"(读写,追加)

如果文件存在,不会清空文件内容,而是将文件指针置于文件的末尾,准备在文件的末尾追加数据。

如果文件不存在,会创建一个新文件。

可以从文件中读取数据,也可以向文件写入数据。

文件指针最初指向文件的末尾。

总结:

"r" 和 "r+" 允许读取,但"r"不允许写入,而"r+"允许读写。

"w" 和 "w+" 清空文件内容(或创建新文件),但"w"只允许写入,而"w+"允许读写。

"a" 和 "a+" 都是在文件末尾追加,但"a"只允许写入,而"a+"允许读写。

选择正确的模式对于避免数据丢失和确保数据正确读写至关重要。例如,如果你想在一个文件的末

1.fopen

功能:打开一个文件或创建一个新的文件

返回值:如果成功,返回指向FILE结构体的指针;如果失败,返回NULL

函数原型 :FILE *fopen(const char *path, const char *mode);

示例:​​​​​​​

FILE *fp = fopen("example.txt", "w");

2if (fp == NULL) {

3    perror("Error opening file");

4    exit(EXIT_FAILURE);

5}

2.fclose

功能:关闭一个已经打开的文件。

返回值:如果成功,返回0;如果失败,返回EOF(通常定义为-1)

函数原型 :int fputc(int c, FILE *stream);

示例:

fclose(fp);

3.fputc

功能:向文件写入一个字符。

返回值:如果成功,返回写入的字符;如果失败,返回EOF

函数原型 :int fputc(int c, FILE *stream);

示例:

fputc('H', fp);

4.fputs

功能:向文件写入一个字符串

返回值:如果成功,返回非零值;如果失败,返回EOF

函数原型 :int fputs(const char *s, FILE *stream);

示例:

fputs("hello World\n", fp);

5.fprintf

功能:格式化输入到文件。

返回值:如果成功,返回写入的字符数;如果失败,返回EOF。

函数原型 :int fprintf(FILE *stream, const char *format, ...);

示例:

fprintf(fp, "Hello, %s!\n", "World");

6.fgetc

功能:从文件读取一个字符。

返回值:如果成功,返回读取的字符;如果到达文件结尾或失败,返回EOF

函数原型 :int fgetc(FILE *stream);

示例:

int ch;

while ((ch = fgetc(fp)) != EOF) {

    putchar(ch);

}

7.fgets

功能:从文件读取一行字符串

返回值:如果成功,返回指向字符串的指针;如果到达文件结尾或失败,返回NULL

函数原型 :char *fgets(char *s, int n, FILE *stream);

示例:

char str[100];

fgets(str, sizeof(str), fp);

puts(str);

8.fscanf

功能:从文件读取格式化的输入

返回值:如果成功,返回匹配成功的项目数;如果失败或文件结尾,返回EOF。

函数原型 :int fscanf(FILE *stream, const char *format, ...);

示例:

int number;

fscanf(fp, "%d", &number);

printf("Number read: %d\n", number);

9.fseek

功能:用于改变文件流的当前读写位置,即文件位置指针。

返回值:返回0表示成功,或者如果发生错误,则返回-1

函数原型 :int fseek(FILE *stream, long offset, int whence);

stream:指向FILE类型的指针,表示你要操作的文件流。

offset:是一个long类型的值,表示相对于whence参数指定的起始点偏移多少字节。

whence:是一个整数,用于指定起始点。它可以是以下三个宏之一:

SEEK_SET:相对于文件的起始位置(即从文件开始处移动)。

SEEK_CUR:相对于当前文件位置(即从当前位置移动)。

SEEK_END:相对于文件的结束位置(即从文件末尾移动)。

示例:fseek(p, 0, SEEK_SET); //移动到起始位置

10.open

功能:函数用于打开或创建一个文件,并返回一个文件描述符,它是非负整数,用于后续的文件操作。

返回值:成功时返回一个非负整数的文件描述符;失败时返回 -1,并设置 errno

函数原型 :

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

pathname: 文件路径名。

flags: 打开文件的模式,例如 O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC 等。

mode: 只在 flags 包含 O_CREAT 时有效,用于指定新创建文件的权限。

使用示例

#include <fcntl.h>

2#include <sys/stat.h>

3

4int fd;

5fd = open("myfile.txt", O_RDWR | O_CREAT, 0644);

6if (fd == -1) {

7    perror("open");

8    exit(EXIT_FAILURE);

9}

11.write

功能:write 函数用于向一个打开的文件描述符写入数据。

返回值:成功时返回实际写入的字节数;如果返回 -1,则表示出错,可通过 errno 获取错误信息。

函数原型 :

#include <unistd.h>

2ssize_t write(int fd, const void *buf, size_t count);

使用示例

#include <unistd.h>

2

3ssize_t nwritten;

4char str[] = "Hello, World!";

5nwritten = write(fd, str, sizeof(str));

6if (nwritten == -1) {

7    perror("write");

8    exit(EXIT_FAILURE);

9}

12.read

功能:read 函数用于从一个打开的文件描述符读取数据

返回值:功时返回实际写入的字节数;如果返回 -1,则表示出错,可通过 errno 获取错误信息

函数原型 :

#include <unistd.h>

2ssize_t read(int fd, void *buf, size_t count);

参数:

fd: 文件描述符。

buf: 存放读取数据的缓冲区的指针。

count: 要读取的最大字节数。

使用示例

1#include <unistd.h>

2

3ssize_t nwritten;

4char str[] = "Hello, World!";

5nwritten = write(fd, str, sizeof(str));

6if (nwritten == -1) {

7    perror("write");

8    exit(EXIT_FAILURE);

9}

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值