有一个共享缓冲区char[ buf 请编写程序完成以下功能 1.父进程往缓冲区写入”ABC”,写入完成后发送信号给子进程,并显示相关信息 2.子进程在接收到父进程的信号后,把缓冲区的数据读出并显示相关信息
时间: 2024-03-14 16:43:12 浏览: 125
好的,下面是一个示例程序,可以实现父进程向共享缓冲区写入数据,发送信号给子进程,子进程接收信号后从共享缓冲区读取数据并显示相关信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#define BUF_SIZE 10
char buf[BUF_SIZE];
void parent_handler(int signum) {
printf("Parent process send signal to child process\n");
}
void child_handler(int signum) {
printf("Child process receive signal from parent process\n");
printf("Data in buffer: %s\n", buf);
}
int main() {
pid_t pid;
int fd[2];
int res;
// 创建管道
res = pipe(fd);
if (res == -1) {
perror("pipe");
exit(1);
}
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
}
if (pid == 0) {
// 子进程
signal(SIGUSR1, child_handler);
// 从管道中读取数据
read(fd[0], buf, BUF_SIZE);
// 发送信号给父进程
kill(getppid(), SIGUSR1);
exit(0);
} else {
// 父进程
signal(SIGUSR1, parent_handler);
// 将数据写入管道
strncpy(buf, "ABC", BUF_SIZE);
write(fd[1], buf, BUF_SIZE);
// 等待子进程发来信号
pause();
exit(0);
}
return 0;
}
```
在这个例子中,我们首先创建了一个共享缓冲区 "buf",大小为 10。然后,我们创建了一个管道,用于在父子进程之间传递数据。接着,我们创建了一个子进程,子进程注册了 SIGUSR1 信号的处理函数 child_handler,父进程注册了 SIGUSR1 信号的处理函数 parent_handler。
在父进程中,我们将字符串 "ABC" 写入共享缓冲区,发送信号给子进程,然后调用 pause() 函数等待子进程发来信号。在子进程中,我们从管道中读取数据,发送信号给父进程,并退出。
当父进程运行时,它会将数据写入共享缓冲区,并发送信号给子进程。然后,父进程调用 pause() 函数等待子进程发来信号。当子进程运行时,它会从管道中读取数据,发送信号给父进程,并显示共享缓冲区中的数据。
希望这个例子能够帮助你理解如何在父子进程之间使用共享缓冲区和信号进行通信。
阅读全文