尝试读取本地主机文件时出错。_系统编程文件读写这件小事

本文探讨了在进行文件读写时可能遇到的错误情况,包括Bad file descriptor、Interrupted system call等,并详细解析了如何设置文件描述符、偏移量,以及正确处理各种异常状态。在读写过程中,强调了检查接口返回值的重要性,以及使用const限定符保护不变参数,同时提倡查阅man手册获取更详细的系统调用信息。
摘要由CSDN通过智能技术生成
来源: 公众号【编程珠玑】 作者: 守望先生 ID: shouwangxiansheng

9e1530d222229377c117447dc7d2a2f1.png

在《 系统编程-文件IO 》中简单介绍了文件I/O的基本流程,无论选项或者参数多么变化多端,其流程大抵相同,不过是 获取文件描述符,用描述符进行操作,关闭描述符 ,三步而已。那么文件读写又是怎样的流程?需要注意什么?

write/read

在说明这些常见出错之前,就必须先了解其基本用法了。需要注意的是,write/read是不带缓冲的,调用一次,写一次。与fwrite/fread有区别,另外write/read为系统调用, 频繁地系统调用将会增加开销 ,可参考《 库函数和系统调用的区别 》。
#include ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);
参数解释:
  • fd  文件描述符,这个应该不用多做解释
  • buf 要写入的内容,或者读出内容存储的buf,合适的大小非常关键
  • count 读或写的内容大小
这里有两点需要注意一下。 返回值为ssize_t类型,因为它的返回值可以为负,表示出错, 有趣的是这样一来使得其能表示的读写字节范围少了近一半 。 返回大于0,表示读或写入对应的字节数。对于read,返回0表示到文件结尾。 另外,我们还注意到,write函数的第二个参数由const修饰。 为什么要使用const来修饰? 很显然,在写的过程中,write函数不应该对buf的内容进行修改,它仅仅是从buf中读取罢了。这里在编码时常用的设计, 如果不希望该函数修改其内容,则加上const限定符 。const详细说明参考《 const关键字到底该怎么用? 》。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值