举一个fork和select函数一起用的例子
时间: 2024-05-05 22:18:23 浏览: 73
好的,以下是一个使用 fork 和 select 函数的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int main(int argc, char** argv)
{
fd_set rfds;
struct timeval tv;
int retval, child_pid;
// 创建管道
int pipefd[2];
if (pipe(pipefd) == -1) {
perror("pipe");
exit(1);
}
// 创建子进程
child_pid = fork();
if (child_pid == -1) {
perror("fork");
exit(1);
} else if (child_pid == 0) {
// 子进程关闭写端
close(pipefd[1]);
char buffer[100];
int len;
// 从管道读取数据,并输出到终端
while ((len = read(pipefd[0], buffer, sizeof(buffer))) > 0) {
write(STDOUT_FILENO, buffer, len);
}
// 关闭读端
close(pipefd[0]);
exit(0);
} else {
// 父进程关闭读端
close(pipefd[0]);
// 等待 3 秒钟
sleep(3);
// 向管道写入数据
write(pipefd[1], "Hello, world!", 13);
// 关闭写端
close(pipefd[1]);
exit(0);
}
return 0;
}
```
这个例子中,父进程创建了一个管道,并创建了一个子进程。父进程等待 3 秒钟之后,向管道写入了一条字符串,然后关闭了写端。子进程从管道中读取数据,并输出到标准输出。父进程和子进程之间使用 select 函数进行通信,以确保管道中有数据之后再进行读取。
阅读全文