linux 管道建立程序

2021-05-24 11:47:08 字數 1299 閱讀 9897

程序i/o函式,與pclose函式一起使用。#include <

stdio.h

>file *popen( const char *command, const char *type);   intpclose( file *stream);popen() 函式通過建立乙個管道,呼叫 fork 產生乙個子程序,執行乙個 shell 以執行命令來開啟乙個程序。這個程序必須由 pclose() 函式關閉,而不是 fclose() 函式。pclose() 函式關閉標準 i/o 流,等待命令執行結束,然後返回 shell 的終止狀態。如果 shell 不能被執行,則 pclose() 返回的終止狀態與 shell 已執行 exit 一樣。type引數只能是讀或者寫中的一種,得到的返回值(標準 i/o 流)也具有和 type 相應的唯讀或只寫型別。如果 type 是 "r" 則檔案指標連線到 command 的標準輸出;如果 type 是 "w" 則檔案指標連線到 command 的標準輸入。command引數是乙個指向以 null 結束的 shell 命令字串的指標。這行命令將被傳到 bin/sh 並使用-c 標誌,shell 將執行這個命令。popen的返回值是個標準 i/o 流,必須由pclose來終止。前面提到這個流是單向的。所以向這個流寫內容相當於寫入該命令的標準輸入;命令的標準輸出和呼叫popen的程序相同。與之相反的,從流中讀資料相當於讀取命令的標準輸出;命令的標準輸入和呼叫popen的程序相同。如果呼叫 fork() 或 pipe() 失敗,或者不能分配記憶體將返回null,否則返回標準 i/o 流。popen沒有為記憶體分配失敗設定 errno 值。   如果呼叫 fork() 或 pipe() 時出現錯誤,errno 被設為相應的錯誤型別。   如果 type 引數不合法,errno將返回einval。if((fp=popen("/usr/bin/uptime","r"))==null);      else真實示例#define _line_length 300   int get_path_total(const char *path, long long* total)   token = strtok(null, " ");   if (token != null)   }   }   pclose(file);   }   return err;   }

程序通訊 管道建立

管道通訊 管道是單向的 先進先出的,由佇列來實現,它把乙個程序的輸出和另乙個程序的輸入連線在一起 乙個程序 寫程序 在管道的尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料 管道包括無名管道和有名管道。前者用於父程序和子程序間的通訊,後者可用於執行於同一系統的任意兩個程序間的通訊。無名管道 無...

Linux 程序 管道詳解

gdb除錯 設定父程序除錯路徑 set follow fork mode parent 預設 設定子程序除錯路徑 set follow fork mode childexec函式族 使程序執行某一程式。成功無返回值,失敗返回 1 int execlp const char file,const ch...

linux程序通訊之管道

管道 可分為普通管道和命名管道。普通管道用於有親緣關係的程序間的通訊 父子程序 命名管道,通過給管道命名的方式,使得管道變成檔案系統中的管道檔案,從而允許無親緣關係的程序間通過訪問管道檔案進行通訊。管道是單向的,一端只能用於輸入,另一端只能用於輸出。管道是fifo的,即先進先出的,向管道中寫入的資料...