进程通信实验代码 linux
时间: 2023-09-12 07:10:02 浏览: 42
以下是一个简单的进程通信实验代码,使用 Linux 的管道来实现:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#define BUFFER_SIZE 25
#define READ_END 0
#define WRITE_END 1
int main(void)
{
char write_msg[BUFFER_SIZE] = "Hello, World!";
char read_msg[BUFFER_SIZE];
int fd[2];
pid_t pid;
// 创建管道
if (pipe(fd) == -1) {
fprintf(stderr, "Pipe failed");
return 1;
}
// 创建子进程
pid = fork();
if (pid < 0) { // 错误处理
fprintf(stderr, "Fork failed");
return 1;
} else if (pid == 0) { // 子进程
// 关闭不需要的管道端口
close(fd[WRITE_END]);
// 从管道中读取信息
read(fd[READ_END], read_msg, BUFFER_SIZE);
printf("Child process read from pipe: %s", read_msg);
// 关闭管道
close(fd[READ_END]);
} else { // 父进程
// 关闭不需要的管道端口
close(fd[READ_END]);
// 向管道中写入信息
write(fd[WRITE_END], write_msg, strlen(write_msg)+1);
printf("Parent process wrote to pipe: %s", write_msg);
// 等待子进程结束
wait(NULL);
// 关闭管道
close(fd[WRITE_END]);
}
return 0;
}
```
在这个例子中,父进程向管道中写入一条消息,而子进程从管道中读取该消息。注意,我们在创建管道之后,必须要使用 `fork()` 函数创建一个子进程。这是因为管道只能在具有共同祖先的两个进程之间使用。在父进程和子进程之间传递数据时,我们需要使用管道的文件描述符:`fd[WRITE_END]` 和 `fd[READ_END]`。父进程将消息写入 `fd[WRITE_END]`,而子进程从 `fd[READ_END]` 读取消息。
在实际应用中,进程通信的方式可能更加复杂。例如,您可能需要使用套接字(sockets)或共享内存(shared memory)等其他通信机制。但无论您选择什么方法,了解管道的基本概念和用法都是非常重要的。