文件操作函数
1 系统IO
open函数
函数功能
open 函数是一个重要的系统调用,用于打开或创建文件。
函数原型
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数说明
pathname
- 类型: const char
- 作用: 指向欲打开的文件路径字符串。这个参数可以是相对路径或绝对路径。
flags
-
类型: int
-
作用: 指定文件打开的方式和行为。以下是一些常用的标志位:
-
O_RDONLY: 以只读方式打开文件。
-
O_WRONLY: 以只写方式打开文件。
-
O_RDWR: 以可读写方式打开文件。
-
O_CREAT: 如果文件不存在,则创建该文件。
-
O_EXCL: 当与O_CREAT一起使用时,如果文件已存在,则打开操作失败。
-
O_NOCTTY: 如果文件是终端设备,则不将其作为进程的控制终端。
这些标志位可以单独使用,也可以通过逻辑或(|)操作符组合使用。
-
mode
- 类型: mode_t
- 作用: 当flags中设置了O_CREAT标志位时,mode参数指定了新创建文件的初始权限。如果没有设置O_CREAT,则mode参数会被忽略。
返回值
- 如果打开文件成功,open函数返回一个文件描述符,这是一个非负整数,用于后续的读写操作。
- 如果打开文件失败,open函数返回-1,并设置errno以指示错误原因。
creat函数
函数功能
creat 函数是一个系统调用,用于创建一个新文件,并打开它以便写入。
函数原型:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
参数说明:
pathname
- 类型: const char
- 作用: 指向欲创建的文件路径字符串。如果文件已经存在,creat函数会先删除旧文件,然后再创建新文件
mode
- 类型: mode_t
- 作用: 指定了新创建文件的初始权限。这个参数是一个八进制数,表示文件的所有者、所属组以及其他用户的读、写和执行权限。
- 例如,0644 表示所有者有读写权限,组和其他用户只有读权限。
返回值
-
如果创建文件成功,creat函数返回一个文件描述符,这是一个非负整数,用于后续的文件操作。
-
如果创建文件失败,creat函数返回-1,并设置errno以指示错误原因。
write函数
函数功能
往一个打开的文件描述符里面写内容
函数原型
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
参数说明
fd
- 类型: int
- 作用: 文件描述符,标识了要写入数据的目标文件或设备。这个文件描述符通常是通过open、creat或其他相关函数获得的。
buf
- 类型: const void
- 作用: 指向要写入数据的缓冲区的指针。这个缓冲区包含了要写入的数据。
count
- 类型: size_t
- 作用: 要写入的数据的字节数。这个参数指定了从buf指向的缓冲区中写入多少字节到文件描述符fd所指向的文件或设备中。
返回值
- 如果写入成功,write函数返回实际写入的字节数。
- 如果写入失败,write函数返回-1,并设置errno以指示错误原因。
read函数
函数功能
用于从文件描述符所指向的文件或设备中读取数据
函数原型
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
参数说明
fd
- 类型: int
- 作用: 文件描述符,标识了要从中读取数据的源文件或设备。这个文件描述符通常是通过open、creat或其他相关函数获得的。
buf
- 类型: void
- 作用: 指向用于存储读取数据的缓冲区的指针。这个缓冲区将接收从文件描述符fd所指向的文件或设备中读取的数据。
count
- 类型: size_t
- 作用: 指定了最多要读取的数据的字节数。这个参数指定了buf指向的缓冲区的最大容量。
返回值
- 如果读取成功,read函数返回实际读取的字节数。
- 如果读取失败,read函数返回-1,并设置errno以指示错误原因。
- 如果已达到文件尾,read函数返回0。
close函数
函数功能
用于关闭一个打开的文件描述符
函数原型
#include <unistd.h>
int close(int fd);
参数说明
fd
- 类型: int
- 作用: 文件描述符,标识了要关闭的文件或设备。这个文件描述符通常是通过open、creat或其他相关函数获得的。*
返回值
- 如果关闭成功,close函数返回0。
- 如果关闭失败,close函数返回-1,并设置errno以指示错误原因。
lseek函数
函数功能
用于重新定位文件描述符所指向的文件或设备的读写位置。
函数原型
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
参数说明
fd
- 类型: int
- 作用: 文件描述符,标识了要重新定位读写位置的文件或设备。这个文件描述符通常是通过open、creat或其他相关函数获得的。
offset
- 类型: off_t
- 作用: 偏移量,指定了从whence参数指定的位置开始的偏移字节数。正数表示向后偏移,负数表示向前偏移。
whence
- 类型: int
- 作用: 基准位置,指定了offset参数的基准点。它可以取以下三个值之一:
SEEK_SET: 从文件头部开始偏移offset个字节。
SEEK_CUR: 从文件当前读写的指针位置开始,增加offset个字节的偏移量。
SEEK_END: 从文件末尾开始偏移offset个字节。
返回值
- 如果定位成功,lseek函数返回新的文件偏移量。
- 如果定位失败,lseek函数返回-1,并设置errno以指示错误原因。
strstr函数
函数功能
在一个字符串中查找另一个字符串首次出现的位置
函数原型
#include <string.h>
char *strstr(const char *haystack, const char *needle);
参数说明
haystack
-
类型:char
-
作用:指向被搜索的主字符串的指针。
needle
-
类型:char
-
作用:指向要搜索的子字符串的指针。
返回值
- 如果找到子字符串,则返回一个指向主字符串中子字符串首次出现位置的指针。
- 如果没有找到子字符串,则返回 NULL。
2 标准IO
fopen函数
函数功能
用于打开一个文件,并返回一个指向FILE类型的指针,该指针可用于后续的文件操作。
函数原型
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
参数说明
- filename: 指向一个字符串的指针,该字符串包含了要打开的文件的路径和名称。
- mode: 指向一个字符串的指针,该字符串指定了文件的打开模式。
返回值
- 如果文件成功打开,fopen() 返回一个指向FILE类型的指针。
- 如果文件打开失败,fopen() 返回 NULL,并设置全局变量 errno 以指示错误原因。
文件打开模式
- r: 打开一个文本文件以进行读取。文件必须存在。
- r+: 打开一个文本文件以进行更新(读取和写入)。文件必须存在。
- w: 打开一个文本文件以进行写入。如果文件存在,则截断文件;如果文件不存在,则创建文件。
- w+: 打开一个文本文件以进行更新(读取和写入)。如果文件存在,则截断文件;如果文件不存在,则创建文件。
- a: 打开一个文本文件以进行追加。写入的数据将被添加到文件末尾。如果文件不存在,则创建文件。
- a+: 打开一个文本文件以进行更新(读取和追加)。写入的数据将被添加到文件末尾。如果文件不存在,则创建文件。
fread函数
函数功能
用于从文件中读取数据并将其存储到内存中的缓冲区。
函数原型
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数说明
- ptr: 指向一个缓冲区的指针,数据将被读取到这个缓冲区中。
- size: 每个数据项的字节大小。
- nmemb: 要读取的数据项的数量。
- stream: 指向一个FILE对象的指针,该对象标识了要从中读取数据的文件流。
返回值
- 成功返回成功读取到的数据项个数
- 失败返回0
fwrite 函数
函数功能
用于将数据从内存中的缓冲区写入到文件中
函数原型
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数说明
- ptr: 指向一个缓冲区的指针,数据将从这个缓冲区中写入文件。
- size: 每个数据项的字节大小。
- nmemb: 要写入的数据项的数量。
- stream: 指向一个FILE对象的指针,该对象标识了要写入数据的文件流。
返回值
- 如果成功返回实际写入的数据项的数量。
- 如果返回值小于请求的数量,可能是由于发生写入错误或其他原因。
fclose 函数
函数功能
用于关闭一个已经打开的文件流,并释放与之关联的所有资源。
函数原型
#include <stdio.h>
int fclose(FILE *stream);
参数说明
- stream: 指向一个FILE对象的指针,该对象标识了要关闭的文件流。
返回值
- 如果文件成功关闭,fclose() 返回 0。
- 如果关闭过程中发生错误,fclose() 返回 EOF(通常定义为 -1),并且设置全局变量 errno 以指示错误原因。
fseek 函数
函数功能
用于在文件流中移动读写位置指针到指定的位置。
函数原型
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
参数说明
- stream: 指向一个FILE对象的指针,该对象标识了要进行位置移动的文件流。
- offset: 表示要移动的字节数。如果是正数,指针将向前移动;如果是负数,指针将向后移动。
- whence: 基准位置,其值可以是:
- SEEK_SET: offset 被视为从文件开始处的绝对位置。
- SEEK_CUR: offset 被视为从当前位置的相对偏移量。
- SEEK_END: offset 被视为从文件末尾的相对偏移量。
返回值
- 如果位置成功改变,fseek() 返回 0。
- 如果发生错误,fseek() 返回 EOF(通常定义为 -1),并且设置全局变量 errno 以指示错误原因。
fgetc函数
函数功能
用于从指定的文件流中读取下一个字符。
函数原型
#include <stdio.h>
int fgetc(FILE *stream);
参数说明
- stream: 指向一个FILE对象的指针,该对象标识了要从中读取字符的文件流。
返回值
- 如果成功读取字符,fgetc() 返回读取的字符作为无符号字符值。
- 如果到达文件末尾或发生读取错误,fgetc() 返回 EOF(通常定义为 -1)
fgets函数
函数功能
用于从文件流中读取一行字符串
函数原型
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
参数说明
- s: 指向一个字符数组的指针,该数组存储了要读取的字符串。
- size: 要读取的最大字符数(包括最后的空字符)。
- stream: 指向一个FILE对象的指针,该对象标识了要从中读取数据的文件流。
返回值
- 如果成功读取字符串,fgets() 返回指向字符数组的指针。
- 如果到达文件末尾或发生错误,fgets() 返回 NULL。
fputc函数
函数功能
用于将一个字符写入到指定的文件流中
函数原型
#include <stdio.h>
int fputc(int c, FILE *stream);
参数说明
- c: 要写入的字符。虽然参数类型是 int,但实际上只能传递一个字符值(即 char 类型的值)。
- stream: 指向一个FILE对象的指针,该对象标识了要写入数据的文件流。
返回值
- 如果字符成功写入,fputc() 返回写入的字符。
- 如果发生错误,fputc() 返回 EOF(通常定义为 -1),并且设置全局变量 errno 以指示错误原因。
fputs函数
函数功能
用于将一个字符串写入到指定的文件流中
函数原型
#include <stdio.h>
int fputs(const char *s, FILE *stream);
参数说明
- s: 指向一个字符串的指针,该字符串包含要写入的字符序列,以空字符(\0)结尾。
- stream: 指向一个FILE对象的指针,该对象标识了要写入数据的文件流。
返回值
- 如果字符串成功写入,fputs() 返回 0。
- 如果发生错误,fputs() 返回 EOF(通常定义为 -1),并且设置全局变量 errno 以指示错误原因。
putchar函数
函数功能
用于将一个字符写入到标准输出(通常是屏幕)
函数原型
#include <stdio.h>
int putchar(int c);
参数说明
- char: 要写入的字符。虽然参数类型是 int,但实际上只能传递一个字符值(即 char 类型的值)。
返回值
- 如果字符成功写入,putchar() 返回写入的字符。
- 如果发生错误,putchar() 返回 EOF(通常定义为 -1),并且设置全局变量 errno 以指示错误原因。
feof函数
函数功能
用于检测文件流是否已经到达文件末尾。
函数原型
#include <stdio.h>
int feof(FILE *stream);
参数说明
- stream: 指向一个FILE对象的指针,该对象标识了要检测的文件流。
返回值
- 如果文件流的文件结束标志被设置(即已经到达文件末尾),feof() 返回非零值。
- 如果文件流的文件结束标志未被设置(即尚未到达文件末尾),feof() 返回 0。