最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何在Linux中使用popen函數(shù)-創(chuàng)新互聯(lián)

如何在Linux中使用popen函數(shù)?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

臨安網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),臨安網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為臨安上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的臨安做網(wǎng)站的公司定做!

函數(shù)定義


#include 
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);

函數(shù)說明

popen()函數(shù)通過創(chuàng)建一個管道,調(diào)用fork()產(chǎn)生一個子進(jìn)程,執(zhí)行一個shell以運(yùn)行命令來開啟一個進(jìn)程。這個管道必須由pclose()函數(shù)關(guān)閉,而不是fclose()函數(shù)。pclose()函數(shù)關(guān)閉標(biāo)準(zhǔn)I/O流,等待命令執(zhí)行結(jié)束,然后返回shell的終止?fàn)顟B(tài)。如果shell不能被執(zhí)行,則pclose()返回的終止?fàn)顟B(tài)與shell已執(zhí)行exit一樣。

type參數(shù)只能是讀或者寫中的一種,得到的返回值(標(biāo)準(zhǔn)I/O流)也具有和type相應(yīng)的只讀或只寫類型。如果type是"r"則文件指針連接到command的標(biāo)準(zhǔn)輸出;如果type是"w"則文件指針連接到command的標(biāo)準(zhǔn)輸入。

command參數(shù)是一個指向以NULL結(jié)束的shell命令字符串的指針。這行命令將被傳到bin/sh并使用-c標(biāo)志,shell將執(zhí)行這個命令。

popen()的返回值是個標(biāo)準(zhǔn)I/O流,必須由pclose來終止。前面提到這個流是單向的(只能用于讀或?qū)懀?。向這個流寫內(nèi)容相當(dāng)于寫入該命令的標(biāo)準(zhǔn)輸入,命令的標(biāo)準(zhǔn)輸出和調(diào)用popen()的進(jìn)程相同;與之相反的,從流中讀數(shù)據(jù)相當(dāng)于讀取命令的標(biāo)準(zhǔn)輸出,命令的標(biāo)準(zhǔn)輸入和調(diào)用popen()的進(jìn)程相同。

返回值

如果調(diào)用fork()或pipe()失敗,或者不能分配內(nèi)存將返回NULL,否則返回標(biāo)準(zhǔn)I/O流。popen()沒有為內(nèi)存分配失敗設(shè)置errno值。如果調(diào)用fork()或pipe()時出現(xiàn)錯誤,errno被設(shè)為相應(yīng)的錯誤類型。如果type參數(shù)不合法,errno將返回EINVAL。

函數(shù)原型:

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

參數(shù)說明:

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

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

作用:

    popen函數(shù)允許一個程序?qū)⒘硗庖粋€程序作為新進(jìn)程來啟動,并可以傳遞數(shù)據(jù)或者通過它接受數(shù)據(jù)。

    其內(nèi)部實(shí)現(xiàn)為調(diào)用 fork 產(chǎn)生一個子進(jìn)程,執(zhí)行一個 shell, 以運(yùn)行命令來開啟一個進(jìn)程,這個進(jìn)程必須由 pclose() 函數(shù)關(guān)閉。

缺點(diǎn):

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

 舉例:

#include 
  #include 
  #include   
  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+");// 創(chuàng)建一個可寫的文件 
   fread(buff,1,127,fp);//將fp的數(shù)據(jù)流讀到buff中 
   fwrite(buff,1,127,fh);//將buff的數(shù)據(jù)寫入fh指向的文件中   
   pclose(fp); 
   fclose(fh);   
   return 0;   
   } 
~

 運(yùn)行結(jié)果:

[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]$

關(guān)于如何在Linux中使用popen函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


文章名稱:如何在Linux中使用popen函數(shù)-創(chuàng)新互聯(lián)
本文來源:http://fisionsoft.com.cn/article/dseohs.html