#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
volatile int shouldExit = 0;
void handleCtrlC(int signal) {
shouldExit = 1;
}
int main() {
pid_t child_pid;
int pipefd[2];
char buffer[256];
if (pipe(pipefd) == -1) {
perror("Pipe creation failed");
exit(1);
}
signal(SIGINT, handleCtrlC);
child_pid = fork();
if (child_pid == -1) {
perror("Fork failed");
exit(1);
}
if (child_pid == 0) { // 子进程
close(pipefd[1]); // 关闭写入端
while (!shouldExit) {
ssize_t bytes_read = read(pipefd[0], buffer, sizeof(buffer));
if (bytes_read > 0) {
buffer[bytes_read] = '\0';
printf("子进程接收到消息:%s", buffer);
}
}
close(pipefd[0]); // 关闭读取端
} else { // 父进程
close(pipefd[0]); // 关闭读取端
while (!shouldExit) {
int n = rand() % 65536;
int sleep_time = 1 + (rand() % 3);
snprintf(buffer, sizeof(buffer), "父进程消息:Hello-%d\n", n);
write(pipefd[1], buffer, strlen(buffer));
sleep(sleep_time);
}
close(pipefd[1]); // 关闭写入端
// 等待子进程结束
wait(NULL);
}
return 0;
}
Linux2
最新推荐文章于 2024-05-21 10:23:42 发布