现在的位置: 首页 > 综合 > 正文

利用管道技术在两个进程之间通讯.

2012年11月24日 ⁄ 综合 ⁄ 共 1213字 ⁄ 字号 评论关闭
我现在正在做一个基于P2P的通讯工具,需要用到关于两个进程之间传递信息的技术,所以想到了管道技术,下面是源代码,有时间在做分析.
服务器端:(无法自己关闭,需要给其发中断信号.)
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/stat.h>
#include <sys/time.h>
#include <sys/types.h>

#define FIFO_FILE "/tmp/sampleFIFO"

int main()
{
    FILE *fp,*fp1;
    int n_fp;    
    fd_set readfds;
    char readbuf[80];
   
    umask(0);
    mknod (FIFO_FILE, S_IFIFO|0666, 0);
    while (1)
    {
        fp = fopen (FIFO_FILE, "r");
        n_fp = fileno(fp);
        FD_ZERO (&readfds);
        FD_SET (n_fp, &readfds);
        select (n_fp+1, &readfds, NULL, NULL, NULL);
        if (FD_ISSET (n_fp, &readfds))
        {                    
            fgets (readbuf, 80, fp);            
            printf ("Received string: %s/n", readbuf);
        }
        fclose (fp);
        
    }
}

客户端:(源自linux网络编程)
#include <stdio.h>
#include <stdlib.h>

#define FIFO_FILE "/tmp/sampleFIFO"
int main(int argc, char *argv[])
{
    FILE *fp;
   
    if (argc != 2)
    {
        printf ("USAGE: inputfifo [string] /n");
        exit (1);
    }
   
    if ((fp = fopen(FIFO_FILE, "w")) == NULL)
    {
        perror ("fopen");
        exit (1);
    }
   
    fputs(argv[1], fp);
   
    fclose (fp);
    printf("Hello world/n");
    return (0);
}
客户端命令:
[root@rainfish src]# ./inputfifo hello,rainfish
Hello world
[root@rainfish src]#

服务器端收到的信息:

Received string: hello,rainfish

抱歉!评论已关闭.