Unix程序間的通訊

2021-09-19 06:54:45 字數 1039 閱讀 7513

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...