- 论坛徽章:
- 0
|
我希望使用mkfifo进行多线程的通信,但实际的运行结果不对,表现为
1,有的发送的字符,没有接受到
下面是程序,请高手帮忙
//文件名fifo。c,服务器端
include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#define FIFO_CREATE_MODE 0666
#define FIFO_WRITE_MODE (O_APPEND | O_WRONLY)
#define FIFO_READ_MODE (O_RDONLY)
#define FIFO_PATH_LEN 30
#define READ_BUF_LEN 1000
#define WRITE_BUF_LEN 1000
main()
{
char ReadBuf[READ_BUF_LEN];
char WriteBuf[WRITE_BUF_LEN];
int fd;
char FifoPathName[FIFO_PATH_LEN];
memset(FifoPathName, 0, sizeof(FifoPathName));
strcpy(FifoPathName, "myfifo");
unlink(FifoPathName);
fd = mkfifo(FifoPathName, FIFO_CREATE_MODE);// S_IRUSR|S_IWUSR|S_IROTH|S_IWOTH|S_IRGRP|S_IWGRP);
if (fd < 0)
{
printf("mkfifo error\n");
return -1;
}
if (fork() == 0) /*parent */
{
memset(WriteBuf, 0, sizeof(WriteBuf));
strcpy(WriteBuf, "hello world ................................");
fd = open(FifoPathName, FIFO_WRITE_MODE);//open (...,O_WRONLY)的时候不能加O_NONBLOCK
write(fd, WriteBuf , strlen(WriteBuf));
close(fd);
}
else
{
fd = open(FifoPathName, FIFO_READ_MODE);//open要写到循环的前面,不能增加|O_NONBLCOK
while(1)
{
memset(ReadBuf, 0, sizeof(ReadBuf) );
read(fd, ReadBuf , sizeof(ReadBuf) );
printf("fifo read(%d) ;%s\n", strlen(ReadBuf), ReadBuf);
//fflush(stdout);
//close(fd);//不要关闭管道
sleep(2);
}
}
return 0;
}
//客户端,文件名sendbuf.c
include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define FIFO_CREATE_MODE 0666
#define FIFO_WRITE_MODE (O_APPEND | O_WRONLY | O_NDELAY)
#define FIFO_READ_MODE (O_RDONLY)
#define FIFO_PATH_LEN 30
#define READ_BUF_LEN 1000
#define WRITE_BUF_LEN 1000
main(int argc, char *argv[])
{
char WriteBuf[WRITE_BUF_LEN];
int fd, SendLen;
char FifoPathName[FIFO_PATH_LEN];
int i;
memset(FifoPathName, 0, sizeof(FifoPathName));
strcpy(FifoPathName, "myfifo");
if (fd < 0)
{
printf("mkfifo error\n");
return -1;
}
fd = open(FifoPathName, FIFO_WRITE_MODE);
for (i=0; i<100; i++)
{
memset(WriteBuf, 0, sizeof(WriteBuf));
sprintf(WriteBuf, "Another Process :%s [%d]... ", argv[1], i);
SendLen = write(fd, WriteBuf, strlen(WriteBuf) );
printf("send len (%d):%s\n", strlen(WriteBuf), WriteBuf);
sleep(1);
}
return 0;
}
[ 本帖最后由 double0808 于 2007-10-12 17:25 编辑 ] |
|