功能說明:建立管線
標頭檔:#include <unistd.h>
函式宣告:int pipe(int filedes[2]);
函式說明:pipe()會建立管線,並將FD由引數filedes陣列傳回。filedes[0]為管線的讀取端;filedes[1]為寫入端。
回傳值:若成功則傳回0;失敗傳回-1。
範例:
// pipe.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <strings.h> int main(void) { int fd[2], nRet = -1; char szTemp[32], data[] = "Hello!! World!! \n"; unsigned int unByte = 0U; bzero((void *)&fd, sizeof(int) * 2); nRet = pipe(fd); if (nRet == 0) { unByte = write(fd[1], (void *)&data, strlen(data)); printf("Write %d byte data to pipe-fd[1] (%d)!! \n", unByte, fd[1]); memset(&szTemp, '\0', sizeof(char) * 32); unByte = read(fd[0], (void *)&szTemp, sizeof(char) * 32); printf("Read %d byte data from pipe-fd[0] (%d)!! \n", unByte, fd[0]); } else perror("Create pipe() dailed!! \n"); return 0; }基本上這個範例的寫法並沒有任何意義,因為實務上並不會這樣用。比較實際的用法應該是Process A fork()出一個Process B;Process B在處理一些事情,處理完之後,再透過pipe()傳送回Process A來做其它的事情。這個案例僅是呈現pipe()搭配read(), write()的用法而已。
執行結果:
[root@localhost ~]# ./pipe
Write 17 byte data to pipe-fd[1] (4)!!
Read 17 byte data from pipe-fd[0] (3)!!
[root@localhost ~]#
從Read()-Write()的讀寫資料大小都是17 Bytes來判斷,我們所建立的pipe()管線在讀寫資料都是正常地!!
沒有留言:
張貼留言