注意 | 当一个管道共享多对文件描述符时,若将其中的一对读写文件描述符都删除,则该管道就失效。 |
所需头文件 | #include <unistd.h> |
函数原型 | int pipe(int fd[2]) |
函数传入值 | fd[2]:管道的两个文件描述符,之后就可以直接操作这两个文件描述符 |
函数返回值 | 成功:0 |
出错:-1 |
想一想 | 为什么无名管道只能在具有亲缘关系的进程之间建立? |
所需头文件 | #include <stdio.h> | |
函数原型 | FILE *popen(const char *command, const char *type) | |
函数传入值 | command:指向的是一个以null结束符结尾的字符串,这个字符串包含一个shell命令,并被送到/bin/sh以-c参数执行,即由shell来执行 | |
type: | “r”:文件指针连接到command的标准输出,即该命令的结果产生输出 “w”:文件指针连接到command的标准输入,即该命令的结果产生输入 | |
函数返回值 | 成功:文件流指针 | |
出错:-1 |
所需头文件 | #include <stdio.h> |
函数原型 | int pclose(FILE *stream) |
函数传入值 | stream:要关闭的文件流 |
函数返回值 | 成功:返回由popen()所执行的进程的退出码 |
出错:-1 |
小知识 | 用户还可以在命令行使用“mknod 管道名 p”来创建有名管道。 |
所需头文件 | #include <sys/types.h> #include <sys/state.h> | |
函数原型 | int mkfifo(const char *filename,mode_t mode) | |
函数传入值 | filename:要创建的管道 | |
函数传入值 | mode: | O_RDONLY:读管道 |
O_WRONLY:写管道 | ||
O_RDWR:读写管道 | ||
O_NONBLOCK:非阻塞 | ||
函数传入值 | mode: | O_CREAT:如果该文件不存在,那么就创建一个新的文件,并用第三个参数为其设置权限 |
O_EXCL:如果使用O_CREAT时文件存在,那么可返回错误消息。这一参数可测试文件是否存在 | ||
函数返回值 | 成功:0 | |
出错:-1 |
EACCESS | 参数filename所指定的目录路径无可执行的权限 |
EEXIST | 参数filename所指定的文件已存在 |
ENAMETOOLONG | 参数filename的路径名称太长 |
ENOENT | 参数filename包含的目录不存在 |
ENOSPC | 文件系统的剩余空间不足 |
ENOTDIR | 参数filename路径中的目录存在但却非真正的目录 |
EROFS | 参数filename指定的文件存在于只读文件系统内 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |