进程通信实验代码 linux
时间: 2024-01-31 11:02:10 浏览: 60
Linux进程通信代码
以下是一个简单的进程通信实验代码,使用 Linux 系统的 C 语言编写。
首先,需要创建两个进程,一个父进程和一个子进程。父进程将会发送一条消息给子进程,子进程接收到消息后将消息内容打印出来。
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define MSG_SIZE 256
int main() {
int fd[2];
pid_t pid;
char msg[MSG_SIZE];
// 创建管道
if (pipe(fd) == -1) {
fprintf(stderr, "Failed to create pipe\n");
return 1;
}
// 创建子进程
pid = fork();
if (pid < 0) {
fprintf(stderr, "Failed to create child process\n");
return 1;
} else if (pid == 0) { // 子进程
close(fd[1]); // 关闭管道写端
// 读取父进程发送的消息
if (read(fd[0], msg, MSG_SIZE) == -1) {
fprintf(stderr, "Failed to read from pipe\n");
return 1;
}
printf("Received message: %s\n", msg);
close(fd[0]); // 关闭管道读端
exit(0);
} else { // 父进程
close(fd[0]); // 关闭管道读端
char *msg = "Hello, child process!";
// 发送消息给子进程
if (write(fd[1], msg, strlen(msg)+1) == -1) {
fprintf(stderr, "Failed to write to pipe\n");
return 1;
}
close(fd[1]); // 关闭管道写端
wait(NULL); // 等待子进程退出
exit(0);
}
}
```
在代码中,使用 `pipe()` 函数创建了一个管道,该函数会返回两个文件描述符,分别代表管道的读端和写端。然后使用 `fork()` 函数创建了一个子进程,接着父进程向管道写端写入一条消息,子进程从管道读端读取消息并打印出来。
需要注意的是,在父进程和子进程中都需要关闭管道的读端或写端,否则会导致死锁。在父进程中,还需要等待子进程退出,以避免子进程成为僵尸进程。
阅读全文