无名管道pipe(fd)创建后,对无名管道进行读写操作,
时间: 2023-07-09 07:12:23 浏览: 116
liunx下管道的使用
在使用无名管道进行读写操作之前,需要先创建一个无名管道。可以使用以下代码创建一个无名管道:
```
int fd[2];
int ret = pipe(fd);
```
这将创建一个无名管道,并将读端口的文件描述符存储在fd[0]中,将写端口的文件描述符存储在fd[1]中。接下来,可以使用这些文件描述符进行读写操作。
例如,以下代码演示了如何在子进程中向父进程写入数据,并在父进程中读取数据:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int fd[2];
int ret = pipe(fd);
if (ret == -1) {
perror("pipe failed");
exit(1);
}
pid_t pid = fork();
if (pid == -1) {
perror("fork failed");
exit(1);
} else if (pid == 0) {
// 子进程写入数据
close(fd[0]); // 关闭读端口
int data = 12345;
write(fd[1], &data, sizeof(data));
close(fd[1]); // 写完数据后关闭写端口
exit(0);
} else {
// 父进程读取数据
close(fd[1]); // 关闭写端口
int data;
read(fd[0], &data, sizeof(data));
printf("Received data: %d\n", data);
close(fd[0]); // 读完数据后关闭读端口
exit(0);
}
}
```
在上面的代码中,首先创建一个无名管道,并使用fork函数创建一个子进程。在子进程中,关闭读端口,然后写入一个整数数据,最后关闭写端口。在父进程中,关闭写端口,然后读取一个整数数据,最后关闭读端口。注意,读写操作是阻塞的,因此父进程会在等待子进程写入数据时阻塞,子进程会在等待父进程读取数据时阻塞。
阅读全文