一个进程创建链表,发送到管道中, 另一个进程从管道中读取数据,串成链表,并遍历链表 c语言代码
时间: 2024-08-16 17:07:57 浏览: 53
下面是一个简单的C语言代码示例,展示了如何在一个进程中创建一个链表,将其发送到管道中,然后在另一个进程中从管道中读取数据,将其串成链表并遍历。
首先,我们需要创建一个链表的数据结构。这里我们使用简单的单链表结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
接下来,我们创建一个进程来创建链表并发送到管道:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
// 创建链表并发送到管道
void create_list(Node** head) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = 1;
node->next = NULL;
*head = node;
Node* second_node = (Node*)malloc(sizeof(Node));
second_node->data = 2;
second_node->next = NULL;
node->next = second_node;
}
int main() {
// 创建管道和进程
int pipefd;
if (pipe(pipefd) == -1) {
perror("pipe error");
exit(EXIT_FAILURE);
}
pid_t pid = fork(); // 创建子进程
if (pid == -1) {
perror("fork error");
exit(EXIT_FAILURE);
} else if (pid > 0) { // 父进程创建链表并发送到管道中
Node* head = NULL; // 链表的头节点指针
create_list(&head); // 创建链表并赋值给指针head
write(pipefd, &head, sizeof(Node*)); // 将链表写入管道中
close(pipefd); // 关闭写管道的文件描述符,为读操作做好准备
} else { // 子进程从管道中读取数据,串成链表并遍历
Node* head; // 读取到的链表的头节点指针
read(pipefd, &head, sizeof(Node*)); // 从管道中读取链表指针到head指针中
close(pipefd); // 关闭读管道的文件描述符,释放资源
// 遍历链表并打印数据
Node* current = head;
while (current != NULL) {
printf("Data: %d\n", current->data);
current = current->next; // 遍历链表并移动到下一个节点
}
}
return 0;
}
```
接下来,另一个进程将从管道中读取数据,并将其串成链表并遍历。请注意,这两个进程应在不同的机器或系统上运行。他们应该共享同一个管道来交换数据。这是通过将数据发送到同一个套接字来实现的。套接字是由系统创建的通信机制,用于在不同进程之间交换数据。在上述代码中,我们使用了UNIX套接字。但是请注意,由于这些示例是简化的,因此它们可能不适用于生产环境。在实际应用中,您可能需要考虑更多的错误处理和边界情况。
阅读全文