[問題] FIFO dup至 stdout
話說小弟最近剛接觸到Linux C下的FIFO…
在網路上找了一下用法…
試著想要將fifo dup至stdin stdout下…
我的code如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
int main(){
char path[200]="./fifo.tmp";
char str[200];
int i, op;
int myFifo;
scanf("%d", &op);
if(op %2 ==0){
if(mkfifo(path, S_IRWXU | S_IRWXO | S_IRWXG)==-1)
{
fprintf(stderr, "fail fifo\n"); fflush(stderr);
}
myFifo = open(path, O_RDWR);
close(1);
dup(myFifo);
printf("yoyoyo");fflush(stdout);
scanf("%d", &i);
} else {
myFifo = open(path, O_RDWR);
//以下這段是版本一
read(myFifo, str, 6);
//以下這段是版本二
close(0);
dup(myFifo);
scanf("%s", str);
fprintf(stderr, "---%s\n",str); fflush(stderr);
}
}
上面這段code
執行之後,先輸入0進入fifo建立的code
然後等到程式等待scanf("%d", &i);的時候
再執行同一支程式,但改輸入1,進入讀取fifo的code
如果是版本一,fifo可以順利讀到yoyoyo
但如果版本一刪掉,改用版本二,
程式會block在scanf上,
合理推測fifo並沒有正確dup到stdin中
但沒理由fifo可以dup至stdout而不能dup至stdin
是我哪些參數設錯了嗎?
另外…問個觀念的問題…
當建立fifo→丟資料進fifo→程式結束…
fifo的檔案還存在系統中,
這時就算開另一支程式讀取該檔案,
是不是也無法讀到原本送進fifo的資料啊?
小弟是新手…
先謝謝大家的回答了m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.87.174
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章