当前位置:   article > 正文

文件IO打开、关闭、读写、定位操作_文件io读写定位

文件io读写定位

文件IO

5个函数:打开、关闭、读写、定位操作

  1. 概念:由系统提供的一组用于输入输出的函数接口
  2. 特点:
    1. 没有缓冲机制,每次访问都要经过系统调用(系统向上提供的一组接口)
    2. 围绕文件描述符进行操作,文件描述符是非负整数(>=0),依次加1进行分配
    3. 文件IO默认打开三个描述符:0(标准输入)、1(标准输出)、2(标准出错)
    4. 可以操作-、b、c、p、s、l

补充:man 数字 函数名 1-9,1:命令 2:系统调用 3:库函数

打开文件

头文件

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
                               flags:打开文件的方式
                                                O_RDONLY:只读
                                                O_WRONLY:只写
                                                O_RDWR:可读可写
                                                O_CREAT:创建
                                                O_TRUNC:清空
                                                O_APPEND:追加  
返回值:成功:文件描述符
                     失败:-1
当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 int open(const char *pathname, int flags, mode_t mode);
创建出来的文件权限为指定权限值&(~umask)

标准IO和文件IO打开文件方式的对比

标准IO

文件IO

r

O_RDONLY

r+

O_RDWR

w

O_WRONLY|O_CREAT|O_TRUNC, 0666

w+

O_RDWR|O_CREAT|O_TRUNC, 0666

a

O_WRONLY|O_CREAT|O_APPEND,0666

a+

O_RDWR|O_CREAT|O_APPEND,0666

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. int main( 懒得写了 )
  5. {
  6. int fd;
  7. fd = open"a.c",O_RDWR)//文件名,打开方式
  8. if (fd < 0)//判断是否打开
  9. {
  10. perror ("fd open error");
  11. return -1;
  12. }
  13. printf("open seccess\n");
  14. return 0
  15. }

关闭文件

int close(int fd);
功能:关闭文件
参数:fd:文件描述符

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. int main( 懒得写了 )
  5. {
  6. int fd;
  7. fd = open"a.c",O_RDWR)//文件名,打开方式
  8. if (fd < 0)//判断是否打开
  9. {
  10. perror ("fd open error");
  11. return -1;
  12. }
  13. close(fd);//关闭文件
  14. return 0
  15. }

读写文件

ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数:fd  文件描述符
          buf  存放位置
         count  期望的个数
返回值:成功:实际读到的个数
              返回-1:表示出错,并设置errno
              返回0:表示读到文件结尾          
ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd   文件描述符
          buf   要写的内容
          count  期望值
返回值:成功:实际写入数据的个数
              失败  -1

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. int main( 懒得写了 )
  5. {
  6. int fd;
  7. char buf[32]="";
  8. fd = open"a.c",O_RDWR)//文件名,打开方式
  9. if (fd < 0)//判断是否打开
  10. {
  11. perror ("fd open error");
  12. return -1;
  13. }
  14. read(fd,buf,32);
  15. printf("%s",buf);
  16. write(fd,buf,32);
  17. close(fd);//关闭文件
  18. }

文件定位操作

off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置   
参数:fd:文件描述符
               offset偏移量                                                      
                              正数:向文件结尾位置移动
                               负数:向文件开始位置
               whence  相对位置
                               SEEK_SET   开始位置
                               SEEK_CUR   当前位置
                               SEEK_END   结尾位置
返回值:成功:文件的当前位置
                     失败:-1

练习:向文件中第 10 位置处写一个字符,在文件此时的位置,后 20个位置处,写一行字符串hello进去,求此时文件的长度。

标准IO和文件IO区别

标准IO

文件IO

概念

c库中定义的一组输入输出的函数

系统提供一组输入输出的函数

特点

  1. 有缓冲机制
  2. 围绕流进行操作
  3. 默认打开三个流:

stdinstdoutstderr

  1. 可以操作普通文件
  1. 没有缓冲机制
  2. 围绕文件描述符进行操作
  3. 默认打开三个文件描述符:

012

  1. 可以操作任意类型的文件

函数接口

  1. 打开文件:fopen/freopen
  2. 关闭文件:fclose
  3. 读写文件:fgetc/fputc、fgets/fputs、fread/fwrite
  4. 文件定位操作:fseek\rewind\ftell
  1. 打开文件:open
  2. 关闭文件:close
  3. 读写文件:read/write
  4. 文件定位操作:lseek

cat \ head \ tail \ wc -l \ cp \ mv \ ls \ ls -a \ ls -l file.txt

练习:用文件IO实现cp功能

把a.c 内容复制到 b.c

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/112344
推荐阅读
相关标签
  

闽ICP备14008679号