UnixC( 五)之管道和環境變數

2021-09-24 05:47:34 字數 1584 閱讀 5200

1.1 環境變數

1.1.1 概念理解

1.1.2 檢視當前程序的環境變數

例項**: zenv.c

#include int main()

return 0;

}

執行: gcc zenv.c -o zenv

./zenv 執行得到的環境變數是 當前程序的環境變數,而不是bash程序的環境變數

1.1.3

int main(int argc ,char * argc,char * envp);

1.1.4環境變數的exec家族函式結合使用

示例**:

#include #include #include #include int main()

; pid =fork();

if(-1 == pid)

if(0 == pid)

else

return 0;

}

1.2 管道

管道分為 無名管道和有名管道

1.2.1 無名管道

1.2.1.1 **無名管道

在a程序中使用pipe建立乙個管道,返回兩個檔案描述符,這兩個檔案描述符同屬於程序a,那如何才能將這兩個檔案描述符給b程序呢,這就需要fork函式,進行父子間通訊。pcb中有程序映像和檔案描述符。

fork建立子程序,複製父程序的pcb

定義方向(管道是單向的),子程序向管道中寫資料,關閉讀,子程序退出,父程序從管道中讀資料,關閉寫,處理資料,**子程序占用的資源。

1.2.1.2 函式原型

#include

int pipe(int pipefd[2]);

功能:建立管道,乙個單向的資料隧道,用於程序間通訊。

引數:int pipefd[2]:有兩個整數的陣列

返回值:

成功 0

錯誤 -1 errno被設定

返回兩個檔案描述符,通過pipefd陣列返回。pipefd[0]指向了管道的讀端,pipefd[1]指向了管道的寫端。

1.2.1.3 例項**

int main()

if(0 == pid)

else

return 0;

}

1.2.2有名管道

實質是乙個管道檔案,程序間使用管道檔案進行通訊。

管道檔案只是起到程序間通訊的橋梁作用,這個檔案沒有內容。size是0.

1.2.2.1 函式原型

mkfifo(3)

#include

#include

int mkfifo(const char *pathname, mode_t mode);

功能:建立乙個有名的管道檔案

引數:pathname:指定了管道檔案的名字

mode:指定了管道檔案的許可權

返回值:

成功 0

錯誤 -1 errno被設定

1.2.2.2 **例項

UNIX環境變數 IPC之管道通訊

無名管道是一種特殊型別的檔案,完全由作業系統管理和維護,因為其儲存位置只有親緣關係的程序知道,所以只能用於親緣關係的程序之間通訊,而且,其核心資源會在兩個通訊程序退出後自動釋放,無名管道建立函式為 from usr include unistd.h int pipe int fd 2 函式pipe ...

管道 重定向 環境變數

1.管道命令符 grep access.log awk 2.重定向 a.輸出重定向 清空原有檔案內容 echo hello world home test.txt 將內容追加到原有檔案後面 echo hello world home test.txt b.輸入重定向 將檔案作為命令的標準輸出 wc ...

Part two 重定向 管道符和環境變數

一 輸入重定向和輸出重定向 概念1 重定向分為輸出重定向和輸入重定向 2 輸入重定向是把檔案匯入命令中 命令 檔案 將檔案的資訊作為標準資訊輸入命令中 命令 檔案 將檔案的標準資訊讀入,知道遇見分界符才停止 3 輸出重定向是把原本要輸出到螢幕的資訊輸入到指定的檔案中,輸出重定向分為 追加 寫入重定向...