`
jinghuainfo
  • 浏览: 1515051 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

通过管道与子进程通信

 
阅读更多

通过管道与子进程通信

转载时请注明出处:http://blog.csdn.net/absurd/

最近要把mplayer改造成C/S架构的,mplayer比较复杂,为了避免修改mplayer的代码,我决定让mplayer作为Server的子进程来运行,两者之间用管道作为通信方式。通过管道与子进程通信实现很简单,但从来没有用过,还是折腾了好一会儿才搞定,这里做个笔记,供以后查阅。

parent.c

#include <unistd.h>

int main(int argc, char* argv[])

{

int parent_to_child[2] = {0};

int child_to_parent[2] = {0};

pipe(parent_to_child);

pipe(child_to_parent);

if(fork() == 0)

{

close(parent_to_child[1]);

close(child_to_parent[0]);

dup2(parent_to_child[0], STDIN_FILENO);

dup2(child_to_parent[1], STDOUT_FILENO);

execl("./child.exe", "./child.exe", NULL);

}

else

{

char message[32] = {0};

close(parent_to_child[0]);

close(child_to_parent[1]);

fprintf(stderr, "parent:%d/n", getpid());

while(1)

{

write(parent_to_child[1], "to-c", 4);

read(child_to_parent[0], message, 4);

fprintf(stderr, "pid=%d: %s/n", getpid(), message);

if(strcmp(message, "quit") == 0)

{

break;

}

}

}

return 0;

}

child.c

#include <stdio.h>

#include <unistd.h>

int main(int argc, char* argv[])

{

int i = 0;

char message[32] = {0};

fprintf(stderr, "child:%d/n", getpid());

for(i = 0; i < 8; i++)

{

write(STDOUT_FILENO, "to-p", 4);

read(STDIN_FILENO, message, 4);

fprintf(stderr, "pid=%d: %s/n", getpid(), message);

}

write(STDOUT_FILENO, "quit", 4);

return 0;

}

Makefile

ll:

gcc -g parent.c -o parent.exe

gcc -g child.c -o child.exe

clean:

rm -f *.exe

运行测试

[root@localhost pipe]# ./parent.exe

parent:3058

child:3059

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: to-p

pid=3059: to-c

pid=3058: quit

分享到:
评论

相关推荐

    编程高手 笔记 通过管道与子进程通信

    编程高手 笔记 通过管道与子进程通信 编程高手 笔记 通过管道与子进程通信 编程高手 笔记 通过管道与子进程通信 编程高手 笔记 通过管道与子进程通信

    管道机制实现进程间的通信

    操作系统课程作业(本人亲自研究写出) 学习利用管道机制实现进程间的通信,加深对通信机制的理解。 实验内容: ...c) 父进程调用函数read()通过管道读出子进程发来的消息,将消息输出屏幕,然后终止

    进程的管道通信编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2

    进程的管道通信 编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: ...要求父进程先接收子进程P1发来的 消息,然后再接收子进程P2发来的消息。

    实验一 进程通信——管道和信号实验报告.doc

    父进程在屏幕上显示“Parent”,子进程分别在屏幕上显示“Child1”和“Child2”。 如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 要求:使用系统调用fork()...

    管道通信命名管道通信

    创建子进程P1 P2 … 子进程Pi分别向管道各写信息 而父进程则从管道中读出来自于各子进程的信息 实现进程家族间无名管道通讯 扩展之 使之成为客户 服务器模式 并完成一定的任务(自己定义) 2 命名管道通信:利用...

    实验四:Linux下进程管道通信.docx

    任务1:使用Pipe创建管道,创建一个子进程,子进程向父进程发送消息“I am your son!”,父进程接收到子进程的消息后,显示在屏幕上,并向子进程发送“I am your father!”。子进程接收到父进程的消息并显示在屏幕上...

    进程通信之三 父进程传参数与子进程返回值

    《进程通信之三 父进程传参数与子进程返回值》 http://blog.csdn.net/morewindows/article/details/8683830 配套程序。本篇介绍一个简单而又实用的进程通信方式——父进程向子进程传入参数并获取子进程返回值。这个...

    使用无名管道完成进程间通信

    使用无名管道完成进程间通信,进入主函数我们需要先打开无名管道,如果失败则返回失败信息。

    无名管道 进程间的通信

    管道实现进程间的通信,是通过无名管道来实现的,父进程写入命令,子进程读出并执行

    进程的管道通信

    计算机操作系统实验三,掌握计算机进程的管道通信

    进程管道通信

    进程的管道通信 1)使用系统调用pipe()建立一条管道,系统调用fork()分别创建两个子...5) 实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。

    进程的管道通信 实验报告

    父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 1、通过本实验,我了解管道是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe...

    进程的管道通信 进程管理

    使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...

    电子科大操作系统实验课Linux通过管道实现进程间通信

    操作系统实验完整报告 在Linux系统中使用系统调用fork()创建两个子进程,使用系统调用pipe()建立一个管道,两个子进程分别...1.父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 2.在Linux平台下实现。

    进程的管道通信实验 操作系统 课程设计

    进程的管道通信实验 操作系统 课程设计 大家看看 好的顶啊

    进程控制 进程的管道通信

    使用系统调用pipe()建立一个管道,两个子进程分别向管道写信息,父进程则从管道读出来自子进程的信息,显示在屏幕上,记录屏幕的显示结果,分析原因。 任务 编制一段程序,实现进程的管道通信。使用系统调用pipe()...

    进程间通信之管道通信

    1.父进程创建管道和两个子进程p1和p2 2.子进程p1打开给定文件(如果没有,则创建文件),并向文件中写数据,...3.子进程p2通过管道读取消息,如果消息是“ok”,则打开文件,读取文件内容,并将其输出到屏幕上,关闭文件.

    进程的管道通信实验

    父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 程序部分: #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建...

    操作系统上机实验报告-进程的管道通信

    2) wait() 常用来控制父进程与子进程的同步。 在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。 返回值:大于0时,为子进程的ID值;...

    操作系统进程的管道通信实验

    1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C...父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。 自己改后可以运行出来,希望有帮助。

Global site tag (gtag.js) - Google Analytics