zoukankan      html  css  js  c++  java
  • pipe管道

    进程I/O

    FILE *popen(const char *command, const char *type);
    int pclose(FILE *stream);

    创建一个管道,调用 fork 产生一个子进程,执行一个 shell 运行命令来开启一个进程

    type:
    如果 type 是 “r” 则文件指针连接到 command 的标准输出;如果 type 是”w” 则文件指针连接到 command 的标准输入
    command:
    一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用-c 标志,shell 将执行这个命令

    例子:

    fp = popen("ls", "r");
    fread(buf, 1, 100, fp);
    puts(buf);
    
    fp = popen("cat > test.c", "w");
    fwrite(buf, 1, 100, fp);

    进程间通信

    创建 (二选一):

    int mkfifo(const char *filename, mode_t mode);  
    int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t)0); 

    打开:

    int open(const char *pathname, int flags);

    除了open的默认flags。还有一个非阻塞标志O_NONBLOCK

    阻塞:
    1.对于以只读方式(O_RDONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_RDONLY),除非有一个进程以写方式打开同一个FIFO,否则它不会返回;如果open调用是非阻塞的的(即第二个参数为O_RDONLY | O_NONBLOCK),则即使没有其他进程以写方式打开同一个FIFO文件,open调用将成功并立即返回
    2.对于以只写方式(O_WRONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_WRONLY),open调用将被阻塞,直到有一个进程以只读方式打开同一个FIFO文件为止;如果open调用是非阻塞的(即第二个参数为O_WRONLY | O_NONBLOCK),open总会立即返回,但如果没有其他进程以只读方式打开同一个FIFO文件,open调用将返回-1,并且FIFO也不会被打开

  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709939.html
Copyright © 2011-2022 走看看