1. 程式人生 > >linux裡 popen函式的作用

linux裡 popen函式的作用

函式原型:

  #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呼叫將多啟動兩個程序。

 舉例:

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<string.h>
  4 
  5 int main()
  6 {
  7     FILE *fp=NULL;
  8     FILE *fh=NULL;
  9     char buff[128]={0};
 10 
 11     memset(buff,0,sizeof(buff));
 12     fp=popen("ls -l","r");//將命令ls-l 同過管道讀到fp
 13     fh=fopen("shell.c","w+");// 建立一個可寫的檔案
 14     fread(buff,1,127,fp);//將fp的資料流讀到buff中
 15     fwrite(buff,1,127,fh);//將buff的資料寫入fh指向的檔案中
 16 
 17     pclose(fp);
 18     fclose(fh);
 19 
 20     return 0;
 21 
 22     }
~                                                                               

執行結果:

[[email protected] practice]$ ls
popen  popen.c  shell.c
[[email protected] 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   [[email protected] practice]$ vim popen.c
[[email protected]

practice]$ 


相關推薦

linux popen函式作用

函式原型:  #include “stdio.h”  FILE *popen( const char *command, const char* mode )        int pclose(FILE *stream_to_close);引數說明:  command: 是

Linux系統lseek函式作用

首先看下函式:   off_t lseek(int fd, off_t offset, int whence);  所需要標頭檔案:    #include <sys/types.h>    #include <unistd.h> 引數: fd 表示

Linux Socket 相關函式作用及引數詳細分析

int listen(int socket, int backlog); listen()用來等待引數socket的套接字連線。引數backlog指定同時能處理的最大連線要求,如果連線數目達此上限則client端將收到ECONNREFUSED的錯誤。Listen()並未開始接收連線,只是設定

Linuxpopen 函式引起的殭屍程序 defunct 以及解決辦法

        在使用 popen 函式的時候,如果不注意的話,可能會引起殭屍程序 defunct 的存在,雖然該程序不佔用記憶體和 CPU,但是會在程序任務管理樹上佔用一個寶貴的節點。這樣就造成了程序名額的資源浪費,所以一定得處理殭屍程序! 下面以 python 為例來

C++宣告函式原型的作用

#include <iostream> #include <cmath> using namespace std; // 這個宣告函式原型的程式碼必須有, 如果沒有的話會報use of undeclared identifier 'simon' 這個異常 void simo

linux的select函式和一種併發伺服器的實現

select函式   函式原型:   int select(int nfds, fd_set *readfds, fd_set *writefds,                        fd_set *exceptfds, struct timeval *t

Linux 調研popen/system, 理解這兩個函式和fork的區別.

自己的總結:           1.popen是並行(最後子程序是由pclose回收),system是序列(會等待子程序做完事,然後收拾)。           2.system() 在等待命令終止時將忽略SIGINT 和SIGQUIT 訊號,同時阻塞SIGCHLD

Linux popen函式的使用總結

  函式原型:   #include “stdio.h”   FILE *popen( const char* command, const char* mode )   引數說明:   command: 是一個指向以 NULL 結束的 shell 命令字串的指標。這行命

linux popen函式

include <stdio.h>FILE *popen(const char *command, const char *type);描述     popen() 函式建立一個管道 ,然後fork一個子程序, 並呼叫 shell. 因為 管道是被定義成單向

linux C程式設計--popen函式詳解

#include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); 描述 popen() 函式 用 建立管道 的 方式 啟動一個 程序, 並呼叫 shell. 因為 管道

Linux下system與popen函式

曾經的曾經,被system()函式折磨過,之所以這樣,是因為對system()函數了解不夠深入。只是簡單的知道用這個函式執行一個系統命令,這遠遠不夠,它的返回值、它所執行命令的返回值以及命令執行失敗原因如何定位,這才是重點。當初因為這個函式風險較多,故拋棄不用,改

Linux中的popen函式和system函式

說在前面:在實際程式設計中儘量減少使用system函式。int system(const char *command);說明: system()通過呼叫/ bin / sh -c命令執行命令中指定的命令,並在命令完成後返回。在執行該命令期間,SIGCHLD將被阻塞,並且SIG

Linux-----各目錄的作用

存在 進行 程序 機器 proc 狀態 緩存 linu 寫入     Linux各目錄的作用,後期還會進行補充和刪減 目錄名 目錄作用 /bin/ 存放系統命令的目錄,普通用戶和超級用戶都可以執行。不過放在bin下的命令在單用戶模式下也可以執行 /sbin/

Linux 各目錄的作用

動態 一個 都是 line var 核心 include 適合 boot /etc這個目錄用來存放系統管理所需要的配置文件和子目錄。 /bin bin是binary的縮寫。這個目錄沿襲了UNIX系統的結構,存放著使用者最經常使用的命令。例如cp、ls、cat,等等。 /

linux個目錄的作用

use 其他 需要 程序 信息 共享 系統管理 usr 但是 /bin/ :   存放系統命令的目錄,普通用戶和超級用戶都可以執行. 不過放在/bin下的命令在單用戶模式下也可以執行 . /sbin/:  保存和系統環境設置相關的命令,只有超級用戶可以使用這些命令進行系統

linux目錄結構及作用詳圖

目錄結構圖及功能linux目錄結構及作用詳圖

Linux主要目錄和作用

Linux 目錄 作用 Filesystem Hierarchy Standard (FHS):重點在於規範每個特定的目錄下應該要放置什麽數據。這樣做好處是,Linux操作系統能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。 /bin 系統有很多放置執行文件的目錄,但/bin比較特殊

linux常用目錄與作用

章節號 可執行 臨時 group root linux include 第三方應用 resource 前言 作為一個ubuntu菜鳥,看到linux系統下的一大堆不知所雲的目錄名實在是懵逼,因此在這簡單總結下常見的linux系統下的文件目錄與其作用,後面有了新的認知還會不斷

linux常見分割槽的作用

/boot/: 啟動檔案,所有與系統啟動有關的檔案都儲存在這裡 /boot/grub/:grub引導器相關的配置檔案都在這裡 /dev/:此目錄中儲存了所有裝置檔案,例如,使用的分割槽:/dev/hda,/dev/cdrom 等。 /proc/:核心與程序映象 /media/: 掛載媒體裝置 包括軟盤

python中eval函式作用

eval函式就是實現list、dict、tuple與str之間的轉化str函式把list,dict,tuple轉為為字串一、字串轉換成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a)print(type(