系统调用IO接口

前面讲了库的IO接口,这节讲系统调用IO接口
原文链接:https://blog.csdn.net/DX_Jone/article/details/97388969

open

int open (const char* path,int flags,mode_t mode)

  • path 文件名
  • flags 选项标志
其中分为必选参数和可选参数;
1.必选参数:
         O_RDONLY(以只读方式打开文件)    RD
         O_WRONLY(以只写方式打开文件)    WR
         O_RDWR(以读写方式打开文件)   RD
只能选择其一,不能全部使用;

2.可选参数:
         O_CREAT(若文件存在则打开,否则创建新文件)  
	     O_EXCL  (与O_CREAT同时使用,若文件存在则报错;不存在则创建)
	     O_TRUNC(打开文件的同时清空文件)  
         O_APPEND(写数据的时候总是写到文件末尾)
  • 返回值 成功:返回文件描述符 失败: 返回 - 1;

read和write

read接口: ssize_t read(int fd, void *buf, size_t count);
功能:从fd文件中读取count长度的数据,放到buf中;

参数:

  • fd:文件描述符;
  • buf:读出数据的缓冲区,文件读取后的存储位置;
  • count:读取的字节数(是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移)

返回值:成功:返回实际读取到的字节数; 失败:-1;


write接口: ssize_t write(int fd, const void *buf, size_t count);

参数:

  • fd:文件描述符;
  • buf:写入数据
  • count:是每次写入的字节数;

返回值:成功:返回实际写入的字节数; 失败:-1;

lseek:跳转读写位置

off_t lseek(int fd, off_t offset, int whence);

功能:跳转到fd文件的读写位置到指定处,和fseek一样只是文件流指针变为文件描述符

关于库和系统调用的关系

对于 fopen,fclose,fread,fwrite,fget 都是C标准库当中的函数,我们称之为库函数(lib);
而open,close,read,write,lseek都属于系统提供的接口,称之为系统调用接口;
在这里插入图片描述
库函数是对系统调用接口的一种封装;管理者并不需要直接与被管理者交互进行管理,而是通过对被管理者进行描述,并且将描述信息得当组织起来进行管理。

发布了89 篇原创文章 · 获赞 11 · 访问量 5306

猜你喜欢

转载自blog.csdn.net/weixin_44997886/article/details/104325213