• read与write


    函数原型

    1. ssize_t read(int filedes, void *buf, size_t count);  
    2. ssize_t write(int filedes, void* buf, size_t count);  

    功能

      read函数从打开的设备或文件中读取数据。

      函数向打开的设备或文件中写数据。

    头文件

    #include <unistd.h> 

    返回值

      返回值:成功返回写入或读取的字节数count,出错返回-1并设置errno写常规文件时。而write的返回值通常等于请求写的字节数

    count,而向终端设备或网络写则不一定。

    说明

    (1)filedes:文件描述符;
    (2)buf:待写入或读取数据缓存区;
    (3)count:要写入或读取的字节数;
     

    例:

    #include <unistd.h>  
    #include <stdlib.h> 
       
    int main(void)  
    {
       char buf[10];
       int n;
       n = read(STDIN_FILENO, buf, 10);
       if (n < 0) {
        perror("read STDIN_FILENO");
        exit(1);
       }
       write(STDOUT_FILENO, buf, n);
       return 0;  
    }
    #include <unistd.h>  
    #include <fcntl.h>  
    #include <errno.h>  
    #include <string.h>  
    #include <stdlib.h>    
    
    #define MSG_TRY "try again
    "    
    
    int main(void)  
    {
       char buf[10];
       int fd, n;
       fd = open("/dev/tty", O_RDONLY|O_NONBLOCK);
       if(fd<0) {
        perror("open /dev/tty");
        exit(1);
       }
      tryagain:
       n = read(fd, buf, 10);
       if (n < 0) {
        if (errno == EAGAIN) {
         sleep(1);
         write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
         goto tryagain;
        }
         perror("read /dev/tty");
        exit(1);
       }
       write(STDOUT_FILENO, buf, n);
       close(fd);
       return 0;
      }

    注:

    1.注意返回值类型是ssize_t,表示有符号的size_t,这样既可以返回正的字节数、0(表示到达文件末尾)也可以返回负值-1(表示出错)。

    2.使用read,write操作管道,FIFO以及某些设备时,特别是终端,网络和STREAMS,有下列两种性质。

    a.一次read操作所返回的数据可能少于所要求的数据,即使还没达到文件尾端也可能是这样。这不是一个错误,应该
    继续读该设备。
    b.一次write操作的返回值也可能少于指定输出的字节数。这也不是错误,应当继续写余下的数据至该设备。
  • 相关阅读:
    css最简单的在背景图片上显示模糊背景色的方法
    css添加网格背景
    获取bing必应图片
    JavaScript超过一定高度导航添加类名
    6行css就可以解决的瀑布流布局的方法
    css实现背景图横向滚动
    JavaScript根据一个元素的显示隐藏控制另一个元素的显示和隐藏
    JavaScript判断地址栏链接与导航栏链接是否一致并给导航添加class
    JavaScript实现选中文字自动复制
    Day 74 算法基础(二)
  • 原文地址:https://www.cnblogs.com/zhangjiansheng/p/8244313.html
Copyright © 2020-2023  润新知