[問題] FIFO dup至 stdout

看板C_and_CPP (C/C++)作者 (活力花俏草兒仔政﹞O花俏)時間16年前 (2009/12/12 00:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
話說小弟最近剛接觸到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
文章代碼(AID): #1B8dW_X6 (C_and_CPP)
文章代碼(AID): #1B8dW_X6 (C_and_CPP)