1. 管道可以用作父子程序之間的通訊,pipe函式,將fd[0]開啟用於讀取資料,fd[1]開啟用於寫入資料。通常,對於單方向通訊,讀端會關閉寫fd,即fd[1],寫端會關閉讀fd,即fd[0]
int main() ;
read(fd[0], buf, 30);
sleep(2);
write(stdout_fileno, buf, strlen(buf));
exit(0);
} else
}
void test2()
//popen開啟的檔案,必須使用pclose關閉,而不能使用fclose關閉,否則後續讀寫會有問題
printf("ret code is: %d\n", pclose(f));
// echo 'hi,jenny' | sed 's/hi/hello/g'
file *f2 = popen("sed 's/hi/hello/g'", "w");
fputs("hi,jenny", f2);
pclose(f2);
}
2. fifo 就像是乙個檔案。可以執行命令mkfifo或者使用mkfifo函式建立fifo。建立的檔案的標誌會持久化在磁碟上,但是fifo的內容和程序的宣告週期是相同的,也就是如果程序關閉這個fd(準確的說是所有程序都關閉這個fd),則寫入fifo的資料就不復存在了。可以使用ls -f選項檢視檔案型別,fifo會以|結尾,屬性以p開頭。如果乙個程序企圖為唯讀開啟乙個沒有等待寫入的fifo,會阻塞;如果乙個程序企圖為只寫開啟乙個沒有等待讀取的fifo,會阻塞。為讀寫而開啟的fifo不會被阻塞。
int main()
}
3. 對於pipe或者fifo,如果請求讀出的資料量小於pipe/fifo中的資料量,則只返回可用資料;如果請求寫入的資料量小於pipe_buf,則write操作是原子的。
UNIX 程序間通訊
linux繼承了at t和bsd以及早期的程序間的通訊 一般常用的通訊方式有 1 傳統的通訊方式 無名管道,有名管道和訊號。2 對於sys 5 的程序間通訊採用了共享記憶體,訊息佇列和訊號燈的形式。3 bsd,對於一般網路間的通訊採用來套接字的方式實現。1 無名管道的機制以及建立 對於無名管道只是用...
unix程序間通訊
程序間通訊主要可以分為兩大類 1.傳遞控制資訊 程序間的低階通訊 2.傳送大批量資料 程序間的高階通訊 主要的通訊方式主要有 1.主從式通訊方式 master servant communication 通訊的程序雙方存在一種主從式的隸屬關係。主程序是程序的控制者,從程序是程序的從屬者。主要有以下特...
unix程序間的通訊方式
1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 namedpipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfi...