我现在正在做一个基于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
服务器端:(无法自己关闭,需要给其发中断信号.)
#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