亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4176 | 回復(fù): 5
打印 上一主題 下一主題

[Linux] linux編程 mkfifo函數(shù)的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-09-06 22:02 |只看該作者 |倒序?yàn)g覽
不好意思,雖然不是初學(xué)者。但水平一直很菜。
在看fifo函數(shù)的時(shí)候,編寫了個(gè)小程序,但總達(dá)不到我想要的結(jié)果。又找不到問題所在。
只有在此求教各位,望不吝賜教。非常感謝。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <wait.h>

#define ERR_EXIT(m)\
        do{\
            perror(m);\
            exit(-1);\
        }while(0)\

int main(int argc, char* argv[])
{
    int fd,status;
    pid_t pid;
    char buf[10];

    unlink("/tmp/fifo");
    mkfifo("/tmp/fifo",0666);

    pid=fork();

    if(pid<0)
        ERR_EXIT("fork error");

    if(pid>0)
    {
        wait(&status);
        sleep(5);
        fd=open("/tmp/fifo",O_RDWR);
        read(fd,buf,10);
        close(fd);
        printf("the buf is :%s\n",buf);
    }
    else
    {
        fd=open("/tmp/fifo",O_RDWR);
        write(fd,"ABCDEFG",7);
        close(fd);
        exit(0);
    }

    return 0;
}

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
2 [報(bào)告]
發(fā)表于 2012-09-07 09:21 |只看該作者
回復(fù) 1# hstking


    你想要什么結(jié)果?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-09-07 13:45 |只看該作者
我希望的是父進(jìn)程先創(chuàng)造一個(gè)命名管道。然后用fork建立一個(gè)子進(jìn)程。由子進(jìn)程向命名管道內(nèi)寫入數(shù)據(jù)。父進(jìn)程等待子進(jìn)程返回后讀入數(shù)據(jù)。

論壇徽章:
23
雙魚座
日期:2013-08-30 09:25:19辰龍
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-03-15 10:51:5415-16賽季CBA聯(lián)賽之八一
日期:2016-05-31 09:38:3615-16賽季CBA聯(lián)賽之遼寧
日期:2017-08-31 14:59:2115-16賽季CBA聯(lián)賽之遼寧
日期:2017-12-06 14:12:3615-16賽季CBA聯(lián)賽之天津
日期:2019-01-02 15:25:4915-16賽季CBA聯(lián)賽之深圳
日期:2020-12-06 11:26:21獅子座
日期:2014-05-19 09:16:35技術(shù)圖書徽章
日期:2014-03-27 13:37:39技術(shù)圖書徽章
日期:2013-08-30 09:28:52
4 [報(bào)告]
發(fā)表于 2012-09-07 14:18 |只看該作者
父進(jìn)程等待子進(jìn)程返回后讀入數(shù)據(jù)。 這個(gè)好像不能做到吧,具體
可了解下fifo的讀取規(guī)則。

下面這個(gè)是可行的應(yīng)該:
  1.     if(pid<0)
  2.         ERR_EXIT("fork error");
  3.     else if (pid > 0) {
  4.         // parent
  5.         fd=open("/tmp/fifo",O_RDONLY);
  6.         read(fd,buf,10);
  7.         close(fd);
  8.         printf("the buf is :%s\n",buf);
  9.         wait(&status);
  10.     } else {
  11.         // child
  12.         fd=open("/tmp/fifo",O_WRONLY);
  13.         write(fd,"ABCDEFG",7);
  14.         close(fd);
  15.     }
復(fù)制代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2012-09-07 14:40 |只看該作者
感謝各位。我找到原因了。
只要把父進(jìn)程中的wait函數(shù)放到open之后就沒問題了。

執(zhí)行不成功的原因是由于子進(jìn)程中的管道沒有關(guān)閉,將父進(jìn)程的open阻塞了。

非常感謝各位。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2012-09-12 18:14 |只看該作者


從FIFO中讀取數(shù)據(jù)
約定:如果一個(gè)進(jìn)程為了從FIFO中讀取數(shù)據(jù)而阻塞打開了FIFO,那么稱該進(jìn)程內(nèi)的讀操作為設(shè)置了阻塞標(biāo)志的讀操作。

•如果有進(jìn)程寫打開FIFO,且當(dāng)前FIFO為空,則對(duì)于設(shè)置了阻塞標(biāo)志的讀操作來說,將一直阻塞下去,直到有數(shù)據(jù)可以讀時(shí)才繼續(xù)執(zhí)行;對(duì)于沒有設(shè)置阻塞標(biāo)志的讀操作來說,則返回0個(gè)字節(jié),當(dāng)前errno值為EAGAIN,提醒以后再試。
•對(duì)于設(shè)置了阻塞標(biāo)志的讀操作來說,造成阻塞的原因有兩種:一、當(dāng)前FIFO內(nèi)有數(shù)據(jù),但有其它進(jìn)程在讀這些數(shù)據(jù);二、FIFO本身為空。
解阻塞的原因是:FIFO中有新的數(shù)據(jù)寫入,不論寫入數(shù)據(jù)量的大小,也不論讀操作請(qǐng)求多少數(shù)據(jù)量,只要有數(shù)據(jù)寫入即可。
•讀打開的阻塞標(biāo)志只對(duì)本進(jìn)程第一個(gè)讀操作施加作用,如果本進(jìn)程中有多個(gè)讀操作序列,則在第一個(gè)讀操作被喚醒并完成讀操作后,其它將要執(zhí)行的讀操作將不再阻塞,即使在執(zhí)行讀操作時(shí),F(xiàn)IFO中沒有數(shù)據(jù)也一樣(此時(shí),讀操作返回0)。
•如果沒有進(jìn)程寫打開FIFO,則設(shè)置了阻塞標(biāo)志的讀操作會(huì)阻塞。
•如果FIFO中有數(shù)據(jù),則設(shè)置了阻塞標(biāo)志的讀操作不會(huì)因?yàn)镕IFO中的字節(jié)數(shù)少于請(qǐng)求的字節(jié)數(shù)而阻塞,此時(shí),讀操作會(huì)返回FIFO中現(xiàn)有的數(shù)據(jù)量。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP