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]
相關推薦
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()並未開始接收連線,只是設定
Linux 下 popen 函式引起的殭屍程序 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(