进程通信实验代码 linux
时间: 2024-01-31 18:02:03 浏览: 73
以下是一个简单的进程通信实验代码,使用 Linux 的管道(pipe)实现父进程和子进程之间的通信。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.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;
}
if (pid > 0) { /* 父进程 */
/* 关闭写端 */
close(fd[READ_END]);
/* 写入数据到管道 */
write(fd[WRITE_END], write_msg, strlen(write_msg)+1);
/* 关闭管道 */
close(fd[WRITE_END]);
}
else { /* 子进程 */
/* 关闭读端 */
close(fd[WRITE_END]);
/* 从管道中读取数据 */
read(fd[READ_END], read_msg, BUFFER_SIZE);
printf("Received message: %s\n", read_msg);
/* 关闭管道 */
close(fd[READ_END]);
}
return 0;
}
```
该代码创建了一个管道,然后使用 `fork()` 创建了一个子进程。在父进程中,它将 `write_msg` 写入管道中,并关闭了管道的写端。在子进程中,它从管道中读取数据到 `read_msg` 中,并输出该消息。最后,子进程关闭了管道的读端。
注意,这只是一个简单的示例,实际上进程通信可能涉及更复杂的数据结构和协议。此外,此代码还没有进行错误处理,例如管道是否已成功创建和关闭等。
阅读全文