目录
一、标准IO
1.fopen
2.fclose
3.fgetc
4.fputc
5.fgets
6.fputs
7.fread
8.fwrite
9.fseek
10.ffulsh
二、系统IO
1.open
2.close
3.read
4.write
一、标准IO
1.fopen
FILE *fopen(const char *pathname, const char *mode);
以mode的形式打开pathname所指向的文件,将指向文件的指针返回。
返回:成功返回文件,文件打开失败返回NULL。
例:FILE *fp;
fp = fopen("wenjianming",r);
if(fp==NULL)
{
perror("fopen()");
}
errno:错误类型的标号
perror:最后一次的错误信息
strerror:将错误类型标号转换成错误信息
mode的类型:
r | 以只读方式打开文件,文件必须存在。 |
r+ | 以读写方式打开文件,文件必须存在。 |
w | 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
w+ | 打开读写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
a | 附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留 |
a+ | 附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留 |
2.fclose
int fclose(FILE *stream);
连续打开文件不关闭时,最多打开1024个文件
返回:如果流成功关闭,fclose 返回 0,否则返回EOF。
例:fclose(fp);
3.fgetc
int fgetc(FILE *stream);
从文件的第一个字符,一个字节向后读取,stream向后移动。
返回:成功返回字符,如果到了文件的结尾或遇到读错误,将返回EOF。
例:fgetc(fp);
4.fputc
int fputc(int c, FILE *stream);
将字符c写到文件指针fp所指向的文件的当前写指针的位置。
返回:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF
例:fputc(c,fp);
5.fgets
char *fgets(char *s, int size, FILE *stream);
从指定的流 stream 读取一行,并把它存储在s所指向的字符串内。当读取size-1个字符时,或者读取到换行符时,或者到达文件末尾时,停止。
返回 :如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。
例:char a[n];
fgets(a,n,fp);
6.fputs
int fputs(const char *s, FILE *stream);
把字符串写入到指定的流
返回:该函数返回一个非负值,如果发生错误则返回 EOF
例:fputs(a,fp);
7.fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
从stream流中读取nmemb个元素,每个元素大小为size个字节,保存到ptr数组中
返回:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
ptr ------ 这是指向要被写入的元素数组的指针。
size ------ 这是要被写入的每个元素的大小,以字节为单位。
nmemb------ 这是元素的个数,每个元素的大小为 size 字节。
stream ------ 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流
例:fread(a,1,32,fp);
8.fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
将ptr数组中nmemb个元素,每个元素大小为size个字节,写入到stream中
返回:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
例:fwrite(a,1,32,fp);
9.fseek
int fseek(FILE *stream, long offset, int whence);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(SEEK_SET),(SEEK_CUR),(SEEK_END))为基准,偏移offset个字节的位置。
返回值:成功,返回0,失败返回非0值,并设置error的值
例:fseek(fp,10,SEEK_END);
10.ffulsh
int fflush(FILE *stream);
功能是冲洗流中的信息。
缓冲区:暂存空间,大多数情况下,缓冲区的存在是件好事,作用合并系统调用
行缓冲:stdout,换行时,满了时,强制刷新
全缓冲:默认,(只要不是终端设备,全采用全缓冲模式)满了时,强制刷新
无缓冲:stderr,需要立即输出
例:fflush(fp);
二、系统IO
1.open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
将pathname以flags形式打开
pathname 字符串表达式,指定文件名
flags
O_RDONLY | 只读方式 |
O_WRONLY | 只写方式 |
O_RDWR | 可读可写方式 |
O_APPEND | 从文件尾部开始读写文件,所写入的数据追加到文件尾 |
O_TRUNC | 若文件存在并且以可写的方式打开时,将文件长度清为0 |
O_CREAT | 若路径中的文件不存在则自动建立该文件 |
mode 文件的权限类型
例:open(fp,O_RDONLY);
open(fp,O_WRONLY | O_CREAT,0664);
2.close
int close(int fd);
例:close(fp);
3.read
ssize_t read(int fd, void *buf, size_t count);
count是读取的字节数,数据保存在缓冲区buf中,同时文件的当前读写位置向后移
成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。
例:read(fp,a,5);
4.write
ssize_t write(int fd, const void *buf, size_t count);
将buf中count个字节数写入到fd中
返回:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,存入errno中
例:write(fp,a,5);
注:本文是通过听李慧芹老师上课记的笔记,如有理解不到位请多多包涵,也请多多指教