网站设计成功案例,如何在一个地方建设网站,wordpress域名后缀,网站空间虚拟主机续费2.文件IO **1. 文件I/O概述****2. 文件I/O函数接口****3. 文件定位****4. 文件描述符与文件流指针的转换****5. 文件I/O与标准I/O的比较****6. 练习与作业****7. 文件I/O与标准I/O的对应关系****8. 其他注意事项****9. 总结** 1. 文件I/O概述
文件I/O#xff1a;操作系统为了… 2.文件IO **1. 文件I/O概述****2. 文件I/O函数接口****3. 文件定位****4. 文件描述符与文件流指针的转换****5. 文件I/O与标准I/O的比较****6. 练习与作业****7. 文件I/O与标准I/O的对应关系****8. 其他注意事项****9. 总结** 1. 文件I/O概述
文件I/O操作系统为了方便用户使用系统功能而提供的一组系统函数称为系统调用。文件I/O是其中的一部分。特性 没有缓存区。操作对象是文件描述符int类型而不是流FILE*。文件描述符是一个很小的非负整数0-1023内核每打开一个文件就会分配一个文件描述符。 默认文件描述符 0STDIN_FILENO标准输入对应stdin。1STDOUT_FILENO标准输出对应stdout。2STDERR_FILENO标准错误对应stderr。 2. 文件I/O函数接口
open 函数原型int open(const char *pathname, int flags, int mode);功能打开文件并返回文件描述符。参数 pathname文件名。flags打开文件的模式如O_RDONLY、O_WRONLY、O_RDWR等。mode文件权限如0666。 返回值成功返回文件描述符失败返回-1。 write 函数原型ssize_t write(int fd, const void *buf, size_t count);功能向文件中写入数据。参数 fd文件描述符。buf要写入的数据缓冲区。count要写入的字节数。 返回值成功返回实际写入的字节数失败返回-1。 read 函数原型ssize_t read(int fd, void *buf, size_t count);功能从文件中读取数据。参数 fd文件描述符。buf存放读取数据的缓冲区。count要读取的字节数。 返回值成功返回实际读取的字节数失败返回-1读到文件末尾返回0。 close 函数原型int close(int fd);功能关闭文件描述符。返回值成功返回0失败返回-1。 3. 文件定位
lseek 函数原型off_t lseek(int fd, off_t offset, int whence);功能移动文件指针。参数 fd文件描述符。offset偏移量正数向后偏移负数向前偏移。whence起始位置SEEK_SET、SEEK_CUR、SEEK_END。 返回值成功返回偏移量失败返回-1。 lseek与fseek的区别 lseek不支持O_APPEND模式无法生成空洞文件。lseek在设备文件上偏移无效。 4. 文件描述符与文件流指针的转换
fileno 函数原型int fileno(FILE *stream);功能将文件流指针FILE*转换为文件描述符int。返回值成功返回文件描述符失败返回-1。 fdopen 函数原型FILE *fdopen(int fd, const char *mode);功能将文件描述符int转换为文件流指针FILE*。参数 fd文件描述符。mode打开模式如r、w等。 返回值成功返回文件流指针失败返回NULL。 5. 文件I/O与标准I/O的比较
文件I/O 无缓存直接操作文件描述符。适用于底层设备开发效率和安全性较低。 标准I/O 有缓存操作对象是文件流指针FILE*。适用于上层开发效率高且移植性好。 6. 练习与作业
练习1使用文件I/O测试无缓存特性验证终端和文件的直接读写。练习2封装一个简单的printf函数支持缓存和直接输出。作业1使用文件I/O完成两个文件的比较功能测试文件是否相等。作业2使用文件I/O向终端输出100以内的所有偶数。 7. 文件I/O与标准I/O的对应关系
标准I/O文件I/Ofopenopenfputc / fgetcwrite / readfputs / fgetswrite / readfwrite / freadwrite / readfcloseclosefseeklseekftelllseekrewindlseek(fd, 0, SEEK_SET) 8. 其他注意事项
文件描述符的最大值1024范围0-1023可通过ulimit -a查看。阻塞与非阻塞 阻塞程序因某种条件未触发而暂停执行。非阻塞程序继续执行不等待条件触发。 9. 总结
文件I/O是操作系统提供的底层接口适用于设备相关的开发。与标准I/O相比文件I/O没有缓存操作对象是文件描述符。通过open、read、write、close等函数可以实现文件的读写操作。文件I/O与标准I/O各有优缺点开发时应根据需求选择合适的I/O方式。