文件IO操作原理(02)——read函数

文件IO操作原理02

2、read函数

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

fd:打开的文件描述符

buf:buf缓冲区

count:读取的字节数

read函数的功能是从fd文件中读取至多count个字节的内容保存到buf中。函数返回读取到的字节数。如果函数返回-1,表示读取失败(读取失败会设置errno错误标识位)。返回0,表示读取到文件尾。

char buf[1024]={0};

int len=0;

len=read(STDIN_FILENO,buf,1024);

从标准输入文件中读取至多1024个字节内容到buf中。

一个进程默认打开了三个文件描述符。每个文件描述符默认有一个8192个字节大小的缓冲区。

STDIN_FILENO 标准输入流文件,文件描述符值为 0

STDOUT_FILENO 标准输出流文件,文件描述符值为 1

STDERR_FILENO 标准错误流文件,文件描述符值为 2

 

非阻塞模式读取标准输入流文件

   1: #include <unistd.h>
   2: #include <fcntl.h>
   3: #include <errno.h>
   4: #include <string.h>
   5: #include <stdlib.h>
   6:  
   7: #define MSG_TRY "try again\n"
   8:  
   9: int main()
  10: {
  11:     char buf[128];
  12:     int fd=open("/dev/tty",O_RDONLY | O_NONBLOCK);
  13:     int len=0;
  14:     //文件打开失败
  15:     if(fd<0){
  16:         perror("open /dev/tty ");
  17:         exit(1);
  18:     }
  19:     while(1){
  20:         //非阻塞模式,不会停在这里等待输入然后才下一步
  21:         len=read(fd,buf,128);
  22:         if(len<0){
  23:             if(errno==EAGAIN){
  24:                 sleep(3);
  25:                 write(STDOUT_FILENO,MSG_TRY,strlen(MSG_TRY));
  26:                 continue;
  27:             }
  28:             perror("read /dev/tty ");
  29:             exit(0);
  30:         }
  31:         break;
  32:     }
  33:     //读取到的内容写入标准输出流文件
  34:     write(STDOUT_FILENO,buf,len);
  35:     close(fd);
  36:     return 0;
  37: }

你可能感兴趣的:(文件IO操作原理(02)——read函数)