问题:read 函数(man 2)的返回值有什么含义?
当然没那么简单,请说出read用于设备文件、普通文件和套接字时候的返回值含义,(套接字区分阻塞型和非阻塞型)
问题来源:http://faq.0xffffff.org/question/2014/07/30/read-function-return-code/
以下是本人的解答,纯属个人理解。
解答:
在文件那一章我们用到了read函数,它可以读取设备文件和普通文件中的数据,同时在网络编程中也会用到该函数,读取来自socket的数据。
NO.1 read函数的基本原型
ssize_t read(int fd, void *buf, size_t nbytes);
先说一下各参数的含义:参数fd,是文件描述符;参数buf用来存放读到的数据内容,(void *)表示通用指针(看一些开源代码的话会经常碰见);参数nbytes是请求读取的字节数。
还有就是返回值问题:read函数总共会有三种返回值情况,A.若成功,返回读到的字节数;B.若已到文件尾或无可读取的数据,返回0;C.若出错,返回-1.(文件的读写位置会随读取到的字节移动,读写位置记录在内核中)
No.2 read用于设备文件和普通文件的返回值:
曾经听过一句话:linux下,一切设备皆文件。虽然是这样说,但肯定有不同的地方我坚信,现在先不讨论这个。read函数是一个不带缓存的文件I/O操作函数,与此同时open,close,write等也是。