免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3693 | 回复: 7
打印 上一主题 下一主题

[函数] 关于mkfifo函数的程序,就是不成功,请大家看看,有什么问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-23 10:42 |只看该作者 |倒序浏览
第一个程序:
//filename:peter.c
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>

int main(void)
{
        char write_fifo_name[] = "read-fifo";
        char read_fifo_name[] = "write-fifo";
        int write_fd = 0;
        int read_fd = 0;
        char buf[256] = { "\0"};
        int len = 0;

        int ret = mkfifo(write_fifo_name,S_IRUSR | S_IWUSR );
        printf("ret of peter.c is %d\n",ret);
        if(ret == -1)
        {
                printf("Fail to create FIFO %s: %s",write_fifo_name,strerror(errno));
                exit(-1);
        }
        while((read_fd = open(read_fifo_name, O_RDONLY)) == -1)
        {
                sleep(1);
        }
        write_fd = open(write_fifo_name, O_WRONLY);
        if(write_fd == -1)
        {
                printf("Fail to open FIFO %s: %s",write_fifo_name, strerror(errno));
                exit(-1);
        }
        while(1)
        {
                len = read(read_fd, buf, 256);
                if(len > 0)
                {
                        buf[len] = '\0';
                        printf("Lucy: %s\n",buf);
                }
                printf("Peter: ");
                fgets(buf,256,stdin);
                buf[strlen(buf) - 1] = '\0';
                if(strncmp(buf,"quit",4) == 0)
                {
                        close(write_fd);
                        unlink(write_fifo_name);
                        close(read_fd);
                        exit(0);
                }
                write(write_fd,buf,strlen(buf));
        }
}

第二个程序:
//filename : lucy.c
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main(void)
{
        char write_fifo_name[] = "write-fifo";
        char read_fifo_name[] = "read-fifo";

        int write_fd = 0;
        int read_fd = 0;
        char buf[256] = { "\0"};
        int len = 0;
        struct stat stat_buf;

        int ret = 0;
       
        ret = mkfifo(write_fifo_name,S_IRUSR | S_IWUSR);
       
        printf("ret of lucy.c is %d",ret);
       
        if(ret == -1)
        {
                printf("Fail to create FIFO %s: %s",write_fifo_name, strerror(errno));
                exit(-1);
        }

        write_fd = open(write_fifo_name, O_WRONLY);
        if(write_fd == -1)
        {
                printf("Fail to open FIFO %s: %s", write_fifo_name, strerror(errno));
                exit(-1);
        }

        while((read_fd = open(read_fifo_name, O_WRONLY)) == -1)
        {
                sleep(1);
        }
        while(1)
        {
                printf("Lucy: ");
                fgets(buf,256,stdin);
                buf[strlen(buf) - 1] = '\0';
                if(strncmp(buf,"quit",4) == 0)
                {
                        close(write_fd);
                        unlink(write_fifo_name);
                        close(read_fd);
                        exit(0);
                }
                write(write_fd, buf, strlen(buf));
                len = read(read_fd,buf,256);
                if(len > 0)
                {
                        buf[len] = '\0';
                        printf("Peter: %s\n",buf);
                }
        }
}
这两个程序进行进程间通信,但第二个程序在mkfifo时停住不前进,请问题出在什么地方了?
有什么办法解决?

[ 本帖最后由 zhanglupanda 于 2007-7-23 10:54 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-07-23 10:49 |只看该作者
...

[ 本帖最后由 yg 于 2007-7-23 10:51 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-07-23 10:56 |只看该作者
你好像建立了两个不同的FIFO.

论坛徽章:
0
4 [报告]
发表于 2007-07-23 10:57 |只看该作者
我没看太明白

两个程序用fifo通信创建一个就行了 你怎么每个程序都创建

论坛徽章:
0
5 [报告]
发表于 2007-07-23 11:07 |只看该作者
先谢谢楼上两位大哥的帮助。
我是想运行这两个程序,我可以用这两个有名管道来通信,但我对mkfifo不太了解,在两个终端打开就象QQ一样,我用的是ubuntu7.04。
请大家在帮我看看。

[ 本帖最后由 zhanglupanda 于 2007-7-23 11:11 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-07-23 12:20 |只看该作者
http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/index.html
这个网页上有讲解, 你可以看看!

论坛徽章:
0
7 [报告]
发表于 2007-07-23 13:28 |只看该作者
好几次得到您的帮助了,从内心中对您很是感激,我也会向您学习,努力学好知识,尽力帮助别人。
再次感谢您的帮助。

论坛徽章:
0
8 [报告]
发表于 2007-07-23 13:36 |只看该作者
原帖由 zhanglupanda 于 2007-7-23 13:28 发表
好几次得到您的帮助了,从内心中对您很是感激,我也会向您学习,努力学好知识,尽力帮助别人。
再次感谢您的帮助。



不用客气, 我也是在这个论坛上得到了很多人的帮忙.
加油!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP