婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux中popen函數的作用小結

Linux中popen函數的作用小結

熱門標簽:電銷機器人加盟多少錢 貴陽400電話到哪里去辦理 汨羅代理外呼系統 宿松高德地圖標注 400電話申請找 申請400電話有什么用 天津智能外呼系統排名 網絡電話外呼系統撥號軟件 4層電梯外呼控制系統設計

簡單說一下popen()函數

函數定義

#include stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(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。

函數原型:

 #include “stdio.h”
  FILE *popen( const char *command, const char* mode )
    int pclose(FILE *stream_to_close);

參數說明:

  command: 是一個指向以 NULL 結束的 shell 命令字符串的指針。這行命令將被傳到 bin/sh 并使用 -c 標志,shell 將執行這個命令。

  mode: 只能是讀或者寫中的一種,得到的返回值(標準 I/O 流)也具有和 type 相應的只讀或只寫類型。如果 type 是 “r” 則文件指針連接到 command 的標準輸出;如果 type 是 “w” 則文件指針連接到 command 的標準輸入。

作用:

    popen函數允許一個程序將另外一個程序作為新進程來啟動,并可以傳遞數據或者通過它接受數據。

    其內部實現為調用 fork 產生一個子進程,執行一個 shell, 以運行命令來開啟一個進程,這個進程必須由 pclose() 函數關閉。

缺點:

    使用popen的不好影響是,針對每個popen調用,不僅要啟動一個被請求的程序,還要啟動一個shell,即每個popen調用將多啟動兩個進程。

 舉例:

#includestdio.h> 
  #includeunistd.h> 
  #includestring.h>   
  int main() 
  { 
    FILE *fp=NULL; 
    FILE *fh=NULL; 
    char buff[128]={0};   
   memset(buff,0,sizeof(buff)); 
   fp=popen("ls -l","r");//將命令ls-l 同過管道讀到fp 
   fh=fopen("shell.c","w+");// 創建一個可寫的文件 
   fread(buff,1,127,fp);//將fp的數據流讀到buff中 
   fwrite(buff,1,127,fh);//將buff的數據寫入fh指向的文件中   
   pclose(fp); 
   fclose(fh);   
   return 0;   
   } 
~        

 運行結果:

[lol@localhost practice]$ ls
popen popen.c shell.c
[lol@localhost practice]$ cat shell.c
total 12
-rwxrwxr-x. 1 lol lol 5478 May 24 15:39 popen
-rw-rw-r--. 1 lol lol 473 May 24 15:39 popen.c
-rw-rw-r--. 1 lol lol  [lol@localhost practice]$ vim popen.c
[lol@localhost practice]$ 

總結

以上所述是小編給大家介紹的Linux中popen函數的作用小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • 詳解Linux驅動中,probe函數何時被調用

標簽:贛州 昌都 臨沂 廣東 撫州 烏蘭察布 海北 連云港

巨人網絡通訊聲明:本文標題《Linux中popen函數的作用小結》,本文關鍵詞  Linux,中,popen,函數,的,作用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux中popen函數的作用小結》相關的同類信息!
  • 本頁收集關于Linux中popen函數的作用小結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 广元市| 自贡市| 清远市| 淳化县| 沭阳县| 叶城县| 阿城市| 岳阳县| 邳州市| 曲周县| 龙南县| 桂林市| 托克托县| 长治县| 正宁县| 嵩明县| 镇远县| 福泉市| 武邑县| 丰顺县| 大英县| 旌德县| 廊坊市| 葵青区| 加查县| 宁远县| 七台河市| 千阳县| 新田县| 乌海市| 昆明市| 镇原县| 犍为县| 垫江县| 搜索| 罗山县| 桃源县| 诸城市| 出国| 雷山县| 仁寿县|