read and write

调用read函数从打开的文件中读取数据

#include <unistd.h>

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

返回值:成功,返回读取的字节数,若已经读到了文件末尾,返回0;出错,返回-1

参数:

  fd:打开文件的描述符

  buf:保存从文件中读取的字符串

  nbytes:从文件中读取字节数,一般为buf的长度

注:

  ①读普通文件时,在读到要求字节数(nbytes)前已经到达文件尾端,返回当前已经读取了的字节数。

  ②从终端设备读取时,通常一次最多读取一行。

  ③从网络读取时,网络的缓冲机制可能造成返回值小于要求所要读取的字节数。

  ④从pipe和FIFO读取时,如果管道包含的字节数小于所需要的字节数,read返回实际可用的字节数。

调用write函数向打开的文件写数据

#include <unistd.h>

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

返回值:成功,返回已写的字节数;出错,返回-1

注:

  ①对普通文件写操作从文件的当前偏移量处开始

  ②如果打开文件时指定O_APPEND选项,则在每次写操作之前,将该文件的偏移量设置在文件的当前结尾处。在一次写入成功后,该文件偏移量增加实际写的字节数。

原子操作

函数pread和pwrite

#include <unistd.h>

ssize_t pread(int fd, void *buf, size_t nbytes, offset_t offset);

返回值:成功,返回读到的字节数,若已到文件末尾,返回0;出错,返回-1

ssize_t pwrite(int fd, const void *buf, size_t nbytes, off_t offset);

返回值:成功,返回已写的字节数;出错,返回-1

注:

  ①调用pread相当于调用lseek后调用read,但是又有不同

    ※调用pread时,无法中断其定位和读操作,因为这是原子操作

    ※不更新当前文件偏移量(read函数每次读后都会更新偏移量+读取的字节数)

猜你喜欢

转载自www.cnblogs.com/dog-pi/p/10925660.html