linux read/write

ssize_t read(int fd, void *buf, size_t count);

头文件:include <unistd.h>;

count是请求读取的字节数,存在buf缓存区, 文件的都写位置向后移,到文件尾返回0, 出错返回-1, 返回值类型ssize_t, 表示有符号size_t, 这样既可以读到正的字节数,0(到达文件尾),-1(出错),read返回时,返回值决定了buf中有效字节数, 有些情况使得实际读到的字节数小于count;


ssize_t write(int fd, count void *buf, size_t count);

返回值是写入的字节数, 出错返回-1, 写常规文件, write的返回值通常等于请求的字节数count, 设备和网络不一定,读常规文件不会阻塞,读网络文件没有数据包就会阻塞;


open 一个设备指定了O_NONBLACK,read/write就不会阻塞。

以read为例,如果设备没有数据到达返回-1,同时error为EWOULDBLACK或者EAGAIN,表示现在不阻塞直接返回错误,可以试着在都一次(again),这种方式称为轮询(poli);

你可能感兴趣的:(linux read/write)