linux兩個程式如何傳參數?
我只知道要用pipe
可以寫一個實際的範例小程式嗎?
連宣告全部都要
c語言
比如:
程式a:
int main(){
讀取使用者輸入;
輸出使用者的輸入;
}
程式b:
int main(){
讀取a輸出;
印出字;
}
網路上面找到的看起來像是2信"函式"在互傳
我原本已經有2個程式要加pipe傳資料,完全看不懂pipe要加在那....
我只知道要宣告一個int fs[2]; 但不知道是要宣告在那個程式
謝謝你~但我一定要用管線
請問一下有範例嗎??
因為網路上找到的很多都跟FORK()一起用
如果要和FORK()一起用又要怎麼寫??
回"是我"
沒有...兩個是不同的程式
只是B程式需要A程式的輸出才可以運作
可以再問嗎~如果要去衝過2個程式
有順序嗎??
還是有什麼特別的指令
還有就是這樣的寫法是只可以讀一次?
如果我想要b程式在a程式有輸出就印,也是這樣寫??
SORRY..打錯字...是執行= =""
6 個解答
- 是我Lv 51 0 年前最佳解答
兩個 Processes 有 Parent-Child 的關係嗎 ?
2010-08-10 16:42:06 補充:
使用 fork 就有 parent-child 的關係,以下程式碼供參:a.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{
int nFileDes[2];
pid_t nPId;
char s[1024]; if (pipe(nFileDes) < 0) {
perror("pipe");
exit(1);
} if ((nPId = fork()) < 0) {
perror("fork");
exit(1);
}
else if (!nPId) { /* child */
close(nFileDes[0]); /* 關閉 pipe 的 read 之 descriptor */
dup2(nFileDes[1], 1); /* 使 stdout 之 descriptor(1) 以 pipe 的 write descriptor 所取代 */
close(nFileDes[1]); /* 用不到 pipe 的 write 之 descriptor, 關閉之 */
execlp("./b", "./b", NULL); /* 此後 b 的 stdout 輸出, 相當於對 pipe 的 write descriptor 輸出 */
}
else { /* parent */
close(nFileDes[1]); /* 關閉 pipe 的 write 之 descriptor */
dup2(nFileDes[0], 0); /* 使 stdin 之 descriptor(0) 以 pipe 的 read descriptor 所取代 */
close(nFileDes[0]); /* 用不到 pipe 的 read 之 descriptor, 關閉之 */
fgets(s, sizeof(s), stdin); /* 讀取 stdin, 相當於自 pipe 的 read descriptor 輸入 */
printf("[a read]>> %s", s);
}
return 0;
}b.c
#include <stdio.h>int main()
{
char s[1024]; fgets(s, sizeof(s), stdin);
printf("[b wrote]$$ %s", s); return 0;
}
2010-08-12 08:00:47 補充:
『如果要去衝過2個程式』
衝去哪 ???
『如果我想要b程式在a程式有輸出就印』
a.c 中的 fgets-printf 兩行改為:
while (fgets(s, sizeof(s), stdin))
printf("[a read]>> %s", s);
b.c 中的 fgets-printf 兩行改為:
setbuf(stdout, NULL);
while (fgets(s, sizeof(s), stdin))
printf("[b wrote]$$ %s", s);
執行後,正常結束為按下 Ctrl-D (表 EOF)。
2010-08-13 07:25:43 補充:
『我還在努力試』
編譯完 a, b 後, 執行 a 即可自動執行 b, 隨意鍵入一些文字按下 Enter 就可看到結果, 應不需多『努力』。
- 匿名使用者6 年前
您期待已久的 8891休閒城 熱烈開幕囉!
8891遊戲網以優質的服務領先業界
多位美女客服24小時即時線上為您服務!
8891投注網有優於市面所有台灣運彩遊戲的 賠 ~ 率
以及免下載真人 百家樂、21點、骰寶、各國賓果、餐廳賓果、彩球遊戲
另有數百位真人視訊聊天辣妹與您進行互動聊天還有"精彩"電影喔!
心動了嗎!! 快來體驗市面上最完質最高品質的服務
現在有開放免費試玩喔! 官方 : 8891.NET
- 匿名使用者7 年前
【亞洲36588合法彩券公司直營 官網: A36588.NET 】
【 最新活動→迎接新會員,首存狂送20% 】
【運動→電子→對戰→現場→彩球 】
【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】
【亞洲36588合法彩券公司直營 官網: A36588.NET 】
- 1 0 年前
1. pipe
2. share memory
3. message queue
4. AF_UNIX socket
例:
1.使用pipe產生reader和writer兩個檔案描述子放在int fs[2]; 中
2.fork()出一個子行程, 讓子行程使用execl()呼叫另一程式,並利用argv傳遞reader或writer檔案描述子
3.從此兩方就可以使用此二描述子溝通
先自行做做看,如果要程式碼的話,我再給您
2010-08-11 23:31:50 補充:
讚讚讚
這是正確的解法
- 您覺得這個回答如何?您可以登入為回答投票。
- 1 0 年前
pipe?那似乎是管線命令的說。
兩個function要互相傳送資料,簡單點可以試著以建立檔案的方式來做。
A程式將資料輸出到C檔案中,在由B程式在C檔案中讀取。
那如果你要用宣告變數的方式(int fs[2];)。
可以將它放在 .h 檔案裡面,再由兩個AB程式include這個 .h 檔案。
參考資料: 我