电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

read和write用法VIP专享VIP免费

read和write用法_第1页
read和write用法_第2页
read和write用法_第3页
read/w rite read 函数从打开的设备或文件中读取数据。 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1 并设置errno,如果在调read 之前已到达文件末尾,则这次read 返回0 参数count 是请求读取的字节数,读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C 标准I/O 库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C 标准I/O 库时的读写位置是用户空间I/O 缓冲区中的位置。比如用fgetc 读一个字节,fgetc 有可能从内核中预读1024 个字节到I/O 缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE 结构体中记录的读写位置是1。注意返回值类型是ssize_t,表示有符号的size_t,这样既可以返回正的字节数、 0(表示到达文件末尾)也可以返回负值-1(表示出错)。read 函数返回时,返回值说明了 buf 中前多少个字节是刚读上来的。有些情况下,实际读到的字节数(返回值)会小于请求读的字节数count,例如: • 读常规文件时,在读到count 个字节之前已到达文件末尾。例如,距文件末尾还有30 个字节而请求读100 个字节,则read 返回30,下次read 将返回0。 • 从终端设备读,通常以行为单位,读到换行符就返回了。 • 从网络读,根据不同的传输层协议和内核缓存机制,返回值可能小于请求的字节数,后面 socket编程部分会详细讲解。 write 函数向打开的设备或文件中写数据。 #include ssize_t write(int fd, const void *buf, size_t count); 返回值:成功返回写入的字节数,出错返回-1 并设置errno 写常规文件时,write 的返回值通常等于请求写的字节数count,而向终端设备或网络写则不一定。 读常规文件是不会阻塞的,不管读多少字节,read 一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用 read读终端设备就会阻塞,如果网络上没有接收到数据包,调用 read 从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。 现在明确一下阻塞(Block)这个概念。当进程调用一个阻塞的系统函数时,该进程被置于睡眠(Sleep)状态,这时内核调度其它进程运行,直到该进程等待的...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部