系统编程:文件IO(系统调用IO)
文件io的定义1操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用systemcall2c库是为了通用(跨平台linuxwin )而设计的函数接口。3systemcall 直接可以使用linux系统提供的功能。4 c库是对systemcall 的封装。c库的函数会调用systemcall中的函数。标准io 文件io的区别1 .没有缓存区 文件io更适合操作 设备文件。2. 操作对象不在是文件流指针而是文件描述符(很小的非负的整数 0-1023 )3.每个程序在启动的时候操作系统默认为其打开三个描述符与流对象匹配0 STDIN_FILENO stdin1 STDOUT_FILENO stdout2 STDERR_FILENO stderrstdin,stdout,stderr,FILE*相关文件IO函数【open】(const char *pathname, int flags,int mode) 功能:获得一个文件描述符参数:pathname:文件名flags:O_RDONLY只读O_WRONLY写O_RDWR读写O_CREAT创建文件注意 O_EXCL,需要和O_CREAT同时使用表示新建的文件不能存在成功否则open就会失败O_NOCTTY不是终端设备O_TRUNC文件内容清空O_APPEND追加O_ASYNC异步io什么时候io不确定O_NONBLOCK非阻塞返回值:成功返回文件描述符失败返回-1代码示例注意0666代表所有用户可读可以写但是不能执行如果创建的是文本类型不需要执行0777所有人可读可写可执行权限全开【write】 write ssize_t write(int fd, const void *buf, size_t count);功能:通过文件描述符向文件中写一串数据参数:fd:文件描述符buf:要写入文件的数据的首地址count:要写入字符的个数(buf中实际内容的长度)返回值:成功返回实际写入的个数失败返回-1代码示例【read】 read ssize_t read(int fd, void *buf, size_t count);功能:通过文件描述符读取文件中的数据参数:fd:文件描述符buf:存放数据空间的首地址count:要读到数据的字节数(可以比文件中有效数据的长度大 真实的长度由返回值提供)返回值:成功返回读到数据的个数失败返回-1读到文件结尾返回0代码示例【lseek】 off_t lseek(int fd, off_t offset, int whence);功能:定位光标的位置参数:fd:文件描述符offset:偏移量正:向后偏移负:向前偏移零:不偏移whence:SEEK_SETSEEK_CURSEEK_END返回值:成功返回偏移量失败返回-1代码示例注意每打开一个文件都要配对一个close在使用完文件后要关闭该文件