zoukankan      html  css  js  c++  java
  • FIFO 进程间通讯过程设置了阻塞,没有效果 的问题与解决

        if (mkfifo(SERVER_FIFO_NAME, 0666) == -1)
        {
            fprintf(stderr, "Sorry, create server fifo failure!\n");
            exit(EXIT_FAILURE);
        }
            
        server_fifo_fd = open(SERVER_FIFO_NAME, O_RDONLY  );
        if (server_fifo_fd == -1)
        {
            fprintf(stderr, "Sorry, server fifo open failure!\n");
            exit(EXIT_FAILURE);
        }    

        while (1)
        {                
        
            res = read(server_fifo_fd, &MC1, sizeof(MessageClient) );//出问题的地方,没有阻塞效果
            if( res > 0 )//有内容的情况
            {                        
                ...
            }
            else//keep try open //没有内容的情况 ,无奈地睡了一下
            {
                sleep(1);//need to sleep for a few second for it will make 100%cpu
                printf( "\tsleeping res = %d \t",res);
            }
        }

    效果通讯不及时了。。。

    后来读过 卷一 进程间通讯

    提及打开一个 读的来写 会解决这个问题。

    上面的打开读后面,加入一句 open 写的

    server_fifo_fd = open(SERVER_FIFO_NAME, O_RDONLY  );

    int dummy = open(SERVER_FIFO_NAME, O_WRONLY  );/* this will never used*/

    测试之后,发现真解决了问题。

      相见恨晚啊。

  • 相关阅读:
    指定时间的月初和月末一天的写法
    EF写distinct
    服务的调试和安装
    EF写INNER JOIN 链接
    BZOJ 1825: [JSOI2010]蔬菜庆典
    P4171 [JSOI2010]满汉全席
    Educational Codeforces Round 71 (Rated for Div. 2) Solution
    P4292 [WC2010]重建计划
    P3724 [AH2017/HNOI2017]大佬
    P5504 [JSOI2011]柠檬
  • 原文地址:https://www.cnblogs.com/no7dw/p/2358660.html
Copyright © 2011-2022 走看看