Linux 管道 管线


  管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。   

  写进程在管道的尾端写入数据,读进程在管道的首端读出数据;

  数据读出后将从管道中移走,其它读进程都不能再读到这些数据;

  管道提供了简单的流控制机制,进程试图读空管道时,在有数据写入管道前,进程将一直阻塞;

  同样,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞;


  于是就想到可以模仿重定向“>>”命令把管道里的内容写入一个文件

  ps | ./test

  test.c的代码如下

int main()
{
    int i;
    int f_w;
    char a[1000] = {0};

    f_w = open("/usr/test/log-ps.txt", 
              O_WRONLY | O_CREAT,
                 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
    
    for (i = 0; i < 1000; i++ ) {
       a[i] = getchar();
    }

    printf("%s", a);
    
    write(f_w, a, 1000);

    close(f_w);
    
    return 0;
}


  因为找不到管道里数据的结束符,所以只读取了1000个


 

原文地址:https://www.cnblogs.com/idmask/p/4591005.html