12
回答
怎么实现多个进程和同一个进程间的通信???求解
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

<无详细内容>

<无标签>
举报
半点竹节
发帖于6年前 12回/1K+阅
共有12个答案 最后回答: 6年前

我倒。。。正在写这方面的内容呢。用C。 方法很多。不过目前只谈socket的IPC模式。

基本三个内容。

1、服务进程的运行。

2、服务注册

3、客户需求进程通过注册信息,与服务进程进行联系。

比较笨的方法是

一个进程开个socket监听本地某个端口,比如127.0.0.1:5555
另一个需要通信的进程开个socket,连接上这个端口然后进行通信,像网络编程一样

--- 共有 3 条评论 ---
中山野鬼回复 @yisen : 共享内存不是个好事情,模块的耦合度太高。我是怕了。因为用共享内存处理系统任务是经常的事情,毕竟为了优化嘛。 6年前 回复
Yisen所以说是笨方法,嘿嘿,算是弯路吧,不过可以让新人知道可以这么做。我用共享内存跟posix的消息队列比较多。最近喜欢上了zeromq 6年前 回复
中山野鬼你这个还是NET方式。不算IPC。又是效率不够。最好是本地进程服务注册的模式。最简单的就是个文件内容。如同DNS一样,让需求进程能找到服务进程。 6年前 回复

引用来自“中山野鬼”的答案

引用来自“宏哥”的答案

哈哈。看了这个帖子没别的说,FIFO肯定是对的,是否适合松耦合放一边不谈。怎么你这么帅,长的让人嫉妒,踩狗屎,被脑袋撞墙的人骂了。。同情一下先。
每当有屎盆扔过来的时候,我第一就是把这个盆子扣在那些狗头上,免得他们不认账,不知道那个家伙改名没有,哈哈
--- 共有 1 条评论 ---
中山野鬼祝你胃口好。哈。 6年前 回复

下面是我写的简单的通信,可是为什么只有在从终端输入后,pid1进程的输入才会被输出呢?高手给看一下。

#define FIFO_PATH "/root/myfifo"
int main()
{
int ret;
int fd;
char buffer;
int nread;
int i;
int fd_w,fd_pid1;
char c;
char *s="ifrompid";
char tmp[20];
pid_t pid,pid1;
if((pid=fork())<0)
{
printf("fork error");
}
if(pid==0)
{

fd_w = open(FIFO_PATH, O_WRONLY);
if(-1 == fd_w)
{
printf("error\n");
return -1;
}
while(c = getchar())
{
write(fd_w, &c, 1);
}
}
if((pid1=fork())<0)
{
printf("fork pid1 error");
}
if(pid1==0)
{
fd_pid1 = open(FIFO_PATH, O_WRONLY);
if(-1 == fd_w)
{
printf("error\n");
return -1;
}
while(1)
{
strcpy(tmp,s);
write(fd_pid1,tmp,strlen(tmp));
sleep(1);
}
}
/*建立FIFO*/
ret = mkfifo(FIFO_PATH, 0777);
/*打开FIFO*/
fd = open(FIFO_PATH, O_RDONLY);
if(-1 == fd)
{
printf("error\n");
return -1;
}
while(1)
{
nread = read(fd, &buffer, 1);
if(nread > 0)
{
buffer = toupper(buffer);
printf("%c", buffer);
}
}
}

顶部