Linux文件io编程

    • 系统I/O
      • open
        • 函数原型
          • int open(const char *pathname,int flags);
          • int open(const char *pathname,int flags,mode_t mode);
        • 作用
          • 打开一个指定文件并获得文件描述符
        • 头文件
          • <sys/types.h>
          • <sys/stat.h>
          • <fcntl.h>
        • 参数
          • pathname
            • 即将要打开的文件
          • flags
            • O_RDWR:读写方式打开文件
            • O_WRONLY:只写方式打开文件
            • O_RDONLY:只读方式打开文件
            • O_CREAT:如果文件不存在,则创建该文件
            • O_EXCL:如果使用O_CREAT选项且文件存在,则返回错误信息
            • O_NOCTTY:当文件为终端时,阻止该终端成为进程的控制终端
            • O_TRUNC:若文件已存在,则删除文件中原有数据
            • O_APPEND:以追加方式打开文件,需配合写模式方可追加文件
          • mode
            • 如果文件被新建,指定其权限为mode(八进制表示法)
        • 返回值
          • 成功:返回大于等于0的整数(文件描述符)
          • 失败:返回-1
        • 注意事项
          • O_CREATE:文件不存在创建,如果该文件已经存在则默认打开,如果你写成 O_CREATE | O_EXCL那么文件如果存在则会报错打开失败。 一般使用O_CREATE,open需要多填一个形参,文件的权限。
          • O_APPEND:打开文件的时候,他自内部调用了lseek(fd,0,SEEK_END);直接把读写位置设置到文件数据的末尾形成追加模式。
          • open返回值--文件描述符的继承或迭代
          • 同一个文件只open不close只能open1024次
          • 默认的情况下,提供的文件路径是错的,那么会打开文件失败,或者你提供的文件是不存在的,也会打开失败 如果使用了O_CREAT的话,文件不存在会创建的
        • 图示
      • read
        • 函数原型
          • ssize_t read(int fd, void *buf, size_t count);
        • 作用
          • 读取文件
        • 头文件
          • <unistd.h>
        • 参数
          • fd :文件描述符
          • buf:用来存储读出数据的指针
          • count :为要读出的字节数
        • 返回值
          • 成功:返回读到的字节数或0,若达到文件尾则返回0,因为读到的字节数可能小于count的值
          • 失败:返回-1
        • 注意事项
      • write
        • 函数原型
          • ssize_t write(int fd , const void *buf ,size_t count);
        • 作用
          • 写数据进文件
        • 头文件
          • <unistd.h>
        • 参数
          • fd:文件描述符
          • buf :存放你要写入的数据的指针变量
          • count :要写入文件中的数据的字节大小
        • 返回值
          • 成功:返回写入文件的数据的实际大小
          • 失败:返回-1
        • 注意事项
      • lseek
        • 函数原型
          • off_t lseek(int fd, off_t offset , int whence);
        • 作用
          • 控制文件的读写位置
        • 头文件
          • <unistd.h>
        • 参数
          • offset :偏移量,负数:反方向偏移;如果是以文件末尾位参照物偏移,不会受到文件大小的影响,也会偏移过去的。
          • whence:从哪里开始偏移
            • SEEK_SET 从文件头偏移
            • SEEK_CUR 从当前的读写位置偏移
            • SEEK_END 从文件末尾开始偏移
        • 返回值
          • 成功:返回文件当前读写位置
          • 失败:返回-1
        • 注意事项
      • close
        • 函数原型
          • int close(int fd);
        • 作用
          • 关闭文件
        • 头文件
          • <unistd.h>
        • 参数
          • fd:要关闭文件的文件描述符
        • 返回值
          • 成功:返回0
          • 失败:返回-1
        • 注意事项
          • close函数你帮你关闭文件并且释放文件在内存中的资源,打开open几次文件就得close关闭几次文件,close关闭文件成功后,文件的描述符会发释放掉的
    • 🖍标准I/O
      • fopen
        • 函数原型
          • FILE * fopen (const char *path,const char *mode);
        • 作用
          • 打开指定文件
        • 头文件
          • <stdio.h>
        • 参数
          • path:要打开文件的路径
          • mode
            • "r"或"rb" :以只读方式打开文件,要求文件必须存在
            • "r"+或"r+b":以读写方式打开文件,要求文件必须存在
            • "w"或"wb" :以只写方式打开文件,文件如果不存在将会创建新文件;如果存在将会将其内容清空
            • "w+"或"w+b" :以读写方式打开文件,文件如果不存在将会创建新文件;如果存在将会将其内容清空
            • "a"或"ab":以只写方式打开文件,文件如果不存在将会创建新文件;如果存在,文件位置偏移量被自动定位到文件末尾(即以追加方式写数据)
            • "a+"或"a+b":以读写方式打开文件,文件如果不存在将会创建新文件;如果存在,文件位置偏移量被自动定位到文件末尾(即以追加方式写数据)
        • 返回值
          • 成功:返回指向FILE的指针
          • 失败: 返回NULL
        • 图示
      • fclose
        • 函数原型
          • int fclose(FILE *stream);
        • 作用
          • 关闭流
        • 头文件
          • <stdio.h>
        • 参数
          • stream:已打开的流指针
        • 返回值
          • 成功:返回0
          • 失败:返回EOF
      • perror
        • 函数原型
          • void perror(const char*s);
        • 作用
          • 错误处理,打印错误信息
        • 头文件
          • <stdio.h>
        • 参数
          • s:在标准错误流上输出的信息
        • 返回值
      • getc和fgetc和getchar
        • 函数原型
          • int getc(FILE *stream);
          • int fgetc(FILE *stream);
          • int getchar(void);
        • 作用
          • 获取指定文件的一个字符
        • 头文件
          • <stdio.h>
        • 参数
          • stream:文件流指针
        • 返回值
          • 成功:返回读取到的字符
          • 失败:返回EOF
        • 图示
      • putc和fputc和putchar
        • 函数原型
          • int fputc(int c, FILE *stream);
          • int putc(int c , FILE * stream);
          • int putchar(int c);
        • 作用
          • 将一个字符写入一个指定的文件
        • 头文件
          • <stdio.h>
        • 参数
          • c:要写入的字符
          • stream:要写入到的文件流指针
        • 返回值
          • 成功:返回写入到的字符
          • 失败:EOF
        • 图示
      • gets和fgets
        • 函数原型
          • char *fgets(char *s ,int size , FILE *stream);
          • char *gets(char *s);
        • 作用
          • 从指定文件读取最多一行数据
        • 头文件
          • <stdio.h>
        • 参数
          • s:存放读取到的字符串的指针
          • size:s的大小
          • stream:要读取的文件流指针
        • 返回值
          • 成功:返回s
          • 失败:返回NULL
        • 图示
        • 注意事项
          • fgets() 和 gets() 一样,最后的换行符都会从缓冲区中取出来。只不过 gets() 是取出来丢掉,而 fgets() 是取出来自己留着
          • fget() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 '\0' 填充。所以假如你定义的字符数组长度为 n,那么 fgets() 中的 size 就指定为 n–1,留一个给 '\0' 就行了。
          • 如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 '\n' 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 '\0' 填充
      • puts和fputs
        • 函数原型
          • int fputs(const char *s, FILE *stream);
          • int puts(const char *s);
        • 作用:向指定的文件写入一个字符串
        • 头文件
          • <stdio.h>
        • 参数
          • s:要写入的字符串
          • stream:要写入到的文件流指针
        • 返回值
          • 成功:返回非负整数
          • 失败:返回EOF
        • 注意事项
          • 使用 puts() 时,系统会在自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符
          • 使用 fputs() 需不需要后面添加一句“printf("\n");看情况,如果输入时使用的是 gets(),那么就要添加 printf 换行;但如果输入时用的是 fgets(),则不需要。
          • 因为使用 gets() 时,gets() 会将回车读取出来并丢弃,所以换行符不会像 scanf 那样被保留在缓冲区,也不会被 gets() 存储;而使用 fgets() 时,换行符会被 fgets() 读出来并存储在字符数组的最后,这样当这个字符数组被输出时换行符就会被输出并自动换行。但是也有例外,比如使用 fgets() 时指定了读取的长度,如只读取 5 个字符,事实上它只能存储 4 个字符,因为最后还要留一个空间给 '\0',而你却从键盘输入了多于 4 个字符,那么此时“敲”回车后换行符就不会被 fgets() 存储。数据都没有地方存放,哪有地方存放换行符呢!此时因为 fgets() 没有存储换行符,所以就不会换行了。
      • fread
        • 函数原型
          • size_t fread(void *ptr , size_t size , size_t nmemb, FILE *stream);
        • 作用
          • 从指定文件读取若干个数据块
        • 头文件
          • <stdio.h>
        • 参数
          • ptr:读取出来的数据存储的指针
          • size:数据块的大小
          • nmemb:数据块的个数
          • stream:文件流指针
          • 相当于每次读取文件中多少数据(数据块大小),读取多少次(数据块的个数)
        • 返回值
          • 成功:返回读取的数据块个数,等于nmemb
          • 失败:读取的数据块个数,小于nmemb或等于0
          • 当返回小于nmemb的数时,文件stream可能已达末尾或遇到错误
        • 图示
      • fwrite
        • 函数原型
          • size_t fwrite(const void *ptr ,size_t size , size_t nmemb , FILE *stream);
        • 作用
          • 将若干块数据写入指定的文件
        • 头文件
          • <stdio.h>
        • 参数
          • ptr:存储要写于文件的数据的指针
          • size:数据块大小
          • nmemb:数据块个数
          • stream:文件流指针
        • 返回值
          • 成功:写入的数据块的个数,等于nmemb
          • 失败:返回小于nmemb或等于0
          • 返回小于nmemb的值说明要写入的数据块数量不足
        • 图示
        • 注意
          • 写入的字节数小于nm,会找垃圾数凑够nm个字节写入到文件中
      • fseek
        • 函数原型
          • int fseek(FILE *stream , long offset , int whence)
        • 作用
          • 移动到文件指定位置
        • 头文件
          • <stdio.h>
        • 参数
          • stream:文件流指针
          • offset:相对于基准值的偏移量
          • whence:基准值
            • SEEK_SET 代表文件起始位置
            • SEEK_END 代表文件结束位置
            • SEEK_CUR 代表文件当前读写位置
        • 返回值
          • 成功:返回0
          • 失败:返回EOF
      • ftell
        • 函数原型
          • int ftell(FILE * stream)
        • 作用
          • 得到文件位置指针当前位置相对于文件首的偏移字节数
        • 头文件
          • <strdio.h>
        • 参数
          • stream:文件流指针
        • 返回值
          • 成功:返回当前读写位置
          • 失败:返回EOF
  • 🗞笔记总结
  • 注意点
    • fgetc和getc的用法和作用几乎一样,只是getc用于标准输入,fgetc专用于文件输入,但对标准输入文件操作与getc就一样了,后续等同
  • 有不对的地方欢迎指出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值