- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
read和write用法
read/write
read 函数从打开的设备或文件中读取数据。
#include unistd.h
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 unistd.h
ssize_t write(int fd, const void *buf,
size_t count);
返回值:成功返回写入的字节数,出错返回-1 并设置
errno
写常规文件时,write 的返回值通常等于请求写的字节数count,而向终端设备
或网络写则不一定。
读常规文件是不会阻塞的,不管读多少字节,read 一定会在有限的时间内返回。
从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read
读终端设备就会阻塞,如果网络上没有接收到数据包,调用read 从网络读就会
阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在
那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。
现在明确一下阻塞(Block)这个概念。当进程调用一个阻塞的系统函数时,该
进程被置于睡眠(Sleep )状态,这时内核调度其它进程运行,直到该进程等待
的事件发生了(比如网络上接收到数据包,或者调用sleep 指定的睡眠时间到了)
它才有可能继续运行。与睡眠状态相对的是运行(Running)状态,在Linux 内
核中,处于运行状态的进程分为两种情况:
• 正在被调度执行。CPU 处于该进程的上下文环境中,程序计数器
(eip)里保存着该进程的指令地址,通用寄存器里保存着该进程
运算过程的中间结果,正在执行该进程的指令,正在读写该进程的
地址空间。
• 就绪状态。该进程不需要等待什么事件发生,随时都可以执行,但
CPU 暂时还在执行另一个进程,所以该进程在一个就绪队列中等
待被内核调度。系统中可能同时有多个就绪的进程,那么该调度谁
执行呢?内核的调度算法是基于优先级和时间片的,而且会根据每
个进程的运行情况动态调整它的优先级和时间片,让每个进程都能
比较公平地得到机会执行,同时要兼顾用户体验,不能让和用户交
互的进程响应太慢。
下面这个小程序从终端读数据再写回终端。
例28.2. 阻塞读终端
您可能关注的文档
- PROE绘制铣刀详细教程.pdf
- PROFACE触摸屏弹出窗口的制作方法.pdf
- Profinet总线网络数据抓取和分析工具用户手册.pdf
- Project2000项目管理软件在石化装置改造和大修中的运用.pdf
- PROSAIL冠层光谱模型遥感反演区域叶面积指数_李淑敏.pdf
- PS后期技巧.doc
- PS怎样调出橙黄色逆光美女头像照片.pdf
- PS把坐在树底下的美女图片调成暖褐色.pdf
- ps数码暗房9大功能.doc
- PS简单几步创造冲击力震撼的动感效果.pdf
- 2024-2025学年高中信息技术(信息科技)必修1 数据与计算粤教版(2019)教学设计合集.docx
- 2024-2025学年小学劳动五年级上册人民版《劳动》(2022)教学设计合集.docx
- 2024-2025学年小学心理健康五年级京教版(心理健康教育)教学设计合集.docx
- 2024-2025学年初中劳动八年级上册湘人版(2022)教学设计合集.docx
- 2024-2025学年初中地理七年级下册中图版(2024)教学设计合集.docx
- 2024-2025学年初中信息技术(信息科技)七年级全册河北大学版(2012)教学设计合集.docx
- 2024-2025学年高中历史选修一北师大版教学设计合集.docx
- 【核心素养】Module10大单元整体备课 教学设计2023-2024学年外研版(三起)英语四年级下册.docx
- 人教版二年级上册第一单元 大鹿 教案.docx
- 人教版初中体育与健康七年级全一册第二章 田径——50米 教学设计.docx
文档评论(0)