系统文件I/O接口的实现

  系统文件I/O接口类比C语言文件接口实现,它们的操作流程基本是类似的。但是C文件中的接口fopen、fclose、fwrite、fseek、fread都是C标准库当中的函数,我们称之为库函数。而open、close、write、lseek、read是属于系统提供的接口,称之为系统调用接口。库函数跟系统调用接口是属于上下级的关系即库函数封装了系统调用接口。接下来就让我们认识一下系统调用接口。
  • open:打开文件
    • int open(const char *pathname, int flags, mode_t mode);
    • pathname:指定要打开的文件名称
    • flags:选项参数
    • mode:使用权限
    • 必选参数:
    • O_RDONLY O_WRONLY O_RDWR 只能选其一
      • O_RDONLY:以只读方式打开
      • O_WRONLY :以只写方式打开
      • O_RDWR:以读写方式打开文件
    • 可选参数:
      • O_CREAT:若文件存在则打开:否则创建新文件
      • O_EXCL:与O_CREAT同时使用;若文件存在则报错;不存在则创建
      • O_TRUNC:打开文件同时截断文件为0长度
      • O_APPEND:写数据的时候总是写到文件末尾
    • 返回值:文件描述符(正整数) 失败:-1
  #include<stdio.h>
  #include<fcntl.h>
  #include<sys/stat.h>
  int main(){
	  	umask(0);//设置掩码为0                                                                                                                     
	 	 int fd = open("./test.txt",O_RDONLY|O_CREAT,0664);//以只读方式打开,文件不存在则创建它
	  if(fd<0){
		 perror("open error");
		 return -1;
		}
	 return 0;
	} 
  • write:在一个文件描述符上执行写操作
    • ssize_t write(int fd, const void *buf, size_t count);
      • fd:open打开文件所返回的文件描述符
      • buf:要写入的数据
      • count:要写入的字节数
      • 返回值:实际写入的字节数 失败:-1
      char* data = "hello world\n";
         int ret = write(fd,data,strlen(data));
        if(ret<0){
         perror("write error");
        return -1;
         }
      
  • read:从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中
    • ssize_t read(int fd, void *buf, size_t count);
    • 返回值:返回实际读取到的字节数 失败-1
    char buf[1024] = {0};
    ret = read(fd,buf,1023);
      if(ret<0){  
      perror("read error");
       return -1;                                                                                                                    
    }
    printf("ret:%d-[%s]\n",ret,buf);
    
    • lseek:跳转fd文件的读写位置到指定处
      • off_t lseek(int fd, off_t offset, int whence);
        • offset:偏移量
        • whence
          • SEEK_SET : 文件起始位置
          • SEEK_END : 文件末尾位置
          • SEEK_CUR : 文件读写位置
    lseek(fd,0,SEEK_SET);
    
    • close:关闭一个文件描述符
      • int close(int fd);
        接下来是整个代码实现
        在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值