最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux中popen函數(shù)的作用小結(jié)

 更新時(shí)間:2018年05月24日 16:14:34   作者:lao-ding  
popen()函數(shù)通過創(chuàng)建一個(gè)管道,調(diào)用fork()產(chǎn)生一個(gè)子進(jìn)程,執(zhí)行一個(gè)shell以運(yùn)行命令來開啟一個(gè)進(jìn)程。這篇文章重點(diǎn)給大家介紹Linux中popen函數(shù)的作用,感興趣的朋友一起看看吧

簡(jiǎn)單說一下popen()函數(shù)

函數(shù)定義

#include <stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);

函數(shù)說明

  popen()函數(shù)通過創(chuàng)建一個(gè)管道,調(diào)用fork()產(chǎn)生一個(gè)子進(jìn)程,執(zhí)行一個(gè)shell以運(yùn)行命令來開啟一個(gè)進(jìn)程。這個(gè)管道必須由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ù)是一個(gè)指向以NULL結(jié)束的shell命令字符串的指針。這行命令將被傳到bin/sh并使用-c標(biāo)志,shell將執(zhí)行這個(gè)命令。

  popen()的返回值是個(gè)標(biāo)準(zhǔn)I/O流,必須由pclose來終止。前面提到這個(gè)流是單向的(只能用于讀或?qū)懀?。向這個(gè)流寫內(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()時(shí)出現(xiàn)錯(cuò)誤,errno被設(shè)為相應(yīng)的錯(cuò)誤類型。如果type參數(shù)不合法,errno將返回EINVAL。

函數(shù)原型:

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

參數(shù)說明:

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

  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ù)允許一個(gè)程序?qū)⒘硗庖粋€(gè)程序作為新進(jìn)程來啟動(dòng),并可以傳遞數(shù)據(jù)或者通過它接受數(shù)據(jù)。

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

缺點(diǎn):

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

 舉例:

#include<stdio.h> 
  #include<unistd.h> 
  #include<string.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+");// 創(chuàng)建一個(gè)可寫的文件 
   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]$ 

總結(jié)

以上所述是小編給大家介紹的Linux中popen函數(shù)的作用小結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 利用shell獲取指定日期前N天的日期

    利用shell獲取指定日期前N天的日期

    最近因?yàn)轫?xiàng)目的需要對(duì)比2015年10月的數(shù)據(jù),因?yàn)橐荒陙淼臄?shù)據(jù)經(jīng)過了很多次調(diào)整和處理,遇到的最直接的問題是很多數(shù)據(jù)需要重新計(jì)算。只好寫腳本刷數(shù)據(jù)。在準(zhǔn)備腳本的過程中,就需要根據(jù)給定的日期處理數(shù)據(jù),所以就有了這篇文章,下面有需要的朋友們一起學(xué)習(xí)學(xué)習(xí)。
    2016-11-11
  • 寫出健壯Bash Shell腳本的一些技巧總結(jié)

    寫出健壯Bash Shell腳本的一些技巧總結(jié)

    這篇文章主要介紹了寫出健壯Bash Shell腳本的一些技巧總結(jié),本文總結(jié)了set -u、set -e、竟態(tài)條件、信號(hào)描述等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Shell腳本調(diào)試?-n?-v?-x?-c的具體用法

    Shell腳本調(diào)試?-n?-v?-x?-c的具體用法

    本文主要介紹了Shell腳本調(diào)試?-n?-v?-x?-c的具體用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux系統(tǒng)中運(yùn)行.sh文件的幾種方法

    Linux系統(tǒng)中運(yùn)行.sh文件的幾種方法

    這篇文章主要給大家介紹了Linux系統(tǒng)中運(yùn)行.sh文件的幾種方法,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2024-12-12
  • linux bash字符串處理大全

    linux bash字符串處理大全

    linux bash字符串處理大全,需要的朋友可以參考下
    2013-02-02
  • linux shell腳本學(xué)習(xí)xargs命令使用詳解

    linux shell腳本學(xué)習(xí)xargs命令使用詳解

    xargs是一條Unix和類Unix操作系統(tǒng)的常用命令。它的作用是將參數(shù)列表轉(zhuǎn)換成小塊分段傳遞給其他命令,以避免參數(shù)列表過長的問題
    2013-12-12
  • Linux定時(shí)執(zhí)行任務(wù)at和crontab命令詳解

    Linux定時(shí)執(zhí)行任務(wù)at和crontab命令詳解

    本篇文章主要介紹了Linux定時(shí)執(zhí)行任務(wù)at和crontab命令這兩個(gè)命令的基本用法和區(qū)別,一起學(xué)習(xí)下。
    2017-11-11
  • 一個(gè)Linux系統(tǒng)安全設(shè)置的Shell腳本的分享(適用CentOS)

    一個(gè)Linux系統(tǒng)安全設(shè)置的Shell腳本的分享(適用CentOS)

    這篇文章主要介紹了一個(gè)設(shè)置Linux系統(tǒng)安全的Shell腳本的分享,適用CentOS,包含大部份的安全設(shè)置,只需執(zhí)行腳本就可以得到一個(gè)相對(duì)安全的Linux系統(tǒng)了,需要的朋友可以參考下
    2014-06-06
  • linux下使用shell腳本輸出帶顏色字體

    linux下使用shell腳本輸出帶顏色字體

    這篇文章主要介紹了linux下使用shell腳本輸出帶顏色字體,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-06-06
  • linux下命令行操作快捷鍵及技巧(分享)

    linux下命令行操作快捷鍵及技巧(分享)

    下面小編就為大家?guī)硪黄猯inux下命令行操作快捷鍵及技巧(分享)。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03

最新評(píng)論

香港| 沁水县| 青田县| 皋兰县| 孝义市| 香格里拉县| 湘潭县| 隆德县| 赤峰市| 额敏县| 岳池县| 旌德县| 兰西县| 保定市| 甘洛县| 浙江省| 辽宁省| 江安县| 河间市| 甘孜| 花垣县| 克山县| 马边| 建平县| 万载县| 泾川县| 库车县| 寿宁县| 赤壁市| 阿拉善左旗| 阿鲁科尔沁旗| 文水县| 卢氏县| 汝阳县| 通辽市| 揭阳市| 廊坊市| 柳林县| 孟津县| 双鸭山市| 嘉定区|