Unix/Linux中的read和write函数

2016-12-17 19:59:31来源:CSDN作者:wanna_wsl人点击

1、文件描述符
  对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。
2、write函数
  write函数定义如下:
  #include < unistd >
  ssize_t write(int filedes, void *buf, size_t nbytes);
  // 返回:若成功则返回写入的字节数,若出错则返回-1
  // filedes:文件描述符
  // buf:待写入数据缓存区
  // nbytes:要写入的字节数
  
write函数简单示例代码:

#include <error.h>#include <fcntl.h>#include <string.h>#include <sys/types.h>int main(){    int fd = open("./write.txt", O_WRONLY  | O_CREAT, 0666);    if (-1 == fd){        perror("open file error");        return;    }    char* buff = "write data to file!";    ssize_t writelen = write(fd, buff, strlen(buff));    printf("%d/n", writelen);    close(fd);    return 0;}

3、read函数
  read函数定义如下:
  #include < unistd >
  ssize_t read(int filedes, void *buf, size_t nbytes);
  // 返回:若成功则返回读到的字节数,若已到文件末尾则返回0,若出错则返回-1
  // filedes:文件描述符
  // buf:读取数据缓存区
  // nbytes:要读取的字节数
  有几种情况可使实际读到的字节数少于要求读的字节数:
  1)读普通文件时,在读到要求字节数之前就已经达到了文件末端。例如,若在到达文件末端之前还有30个字节,而要求读100个字节,则read返回30,下一次再调用read时,它将返回0(文件末端)。
  2)当从终端设备读时,通常一次最多读一行。
  3)当从网络读时,网络中的缓存机构可能造成返回值小于所要求读的字结束。
  4)当从管道或FIFO读时,如若管道包含的字节少于所需的数量,那么read将只返回实际可用的字节数。
  5)当从某些面向记录的设备(例如磁带)读时,一次最多返回一个记录。
  6)当某一个信号造成中断,而已经读取了部分数据。
  
read函数简单示例代码:

#include <error.h>#include <fcntl.h>#include <string.h>#include <sys/types.h>int main(){    int fd = open("./read.txt", O_RDONLY | O_CREAT, 0666);    if (-1 == fd){        perror("open file error");        return;    }    char buff[1024];    memset(buff, 0, sizeof(buff));    ssize_t readlen = read(fd, buff, 1024);    printf("%s", buff);    printf("%d/n", readlen);    close(fd);    return 0;}

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台