pipe管道

进程I/O

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

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

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

例子:svg

fp = popen("ls", "r");
fread(buf, 1, 100, fp);
puts(buf);

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

进程间通讯

建立 (二选一):spa

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_NONBLOCKcode

阻塞:
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也不会被打开xml

相关文章
相关标签/搜索