利用管道实现一个服务端进程与两个客户端进程间的通信
利用linux C编写两个C语言程序
详细代码点击此链接
https://download.csdn.net/download/m0_52857070/19007426
编写服务程序
第一步,在main函数中使用fork函数创建一个子进程,在子进程(pid==0)调用choose函数来选择与那个客户端通信,输入1选择客户端1,输入2选择客户端2,然后转到对应的子函数处。
else if(pid==0){
printf("请输入0启动程序\n");
scanf("%d",&cho);
if(cho==0){
printf("打开客户端1时输入1可打开客户端1!\n打开客户端2时输入2可打开客户端2!\n输入menu可选择客户端!\n");
choose();
}
//选择要发送给那个客户端,并创建私有管道(写管道)
void choose()
{
int cho;
printf("请输入想要发送的客户端号\n");
scanf("%d",&cho);
if(cho==1){
c1(); //选择与客户端1通信,转到C1()函数处
}
if(cho==2){
c2(); //选择与客户端2通信,转到C2()函数处
}
}
第二步,如果选择的是客户端1,在子函数中先打开一个名为FIFO_1的命名管道(作为私有管道),没有就创建。写入服务端要通过私有管道发送给客户端的信息。如果选择的是客户端2,在子函数中先打开一个名为FIFO_2的命名管道(作为私有管道),没有就创建。写入服务端要通过私有管道发送给客户端的信息。
第三步,在父进程(pid>0)中创建一个名为FIFO_P的命名管道(公有管道),没有就创建。从里面读取客户端发送过来的信息。
编写客户程序
第一步,在main函数中选择那一个客户端与服务端通信,然后转到对应的子函数。
if(cho==1)
{
//执行客户端1
c1();
}
if(cho==2)
{
//执行客户端2
c2();
}
第二步,如果选择的是客户端1,在子函数中打开两个命名管道,没有就创建,一个作为私有管道(FIFO_1),一个作为公有管道(FIFO_P),然后使用fork函数创建一个子进程,在子进程中读取从私有管道中发送过来的信息。在父进程中将要发送给服务端的信息写入公有管道。
如果选择的是客户端2,在子函数中打开两个命名管道,没有就创建,一个作为私有管道(FIFO_2),一个作为公有管道(FIFO_P),然后使用fork函数创建一个子进程,在子进程中读取从私有管道中发送过来的信息。在父进程中将要发送给服务端的信息写入公有管道。
执行结果
运行
serve.c服务程序
运行客户程序