c語言popen
㈠ 如何在c語言中調用DOS命令
#include <stdio.h>
#include <stdlib.h>
int main()
{
char comStr1[]="zyxwvutsrqponmlkjihgfedc";//搜索GHO文件並執行安裝
char ch[] = "if exist %c:\\ghost\\xp32.gho a:\\ghost.exe -nousb -noide -clone,mode=pload,src=%c:\\ghost\\xp32.gho:1,dst=1:1 -crcignore -sure -rb\n";
char ch1[200];
int i;
for(i = 0; comStr1[i] != '\0'; i++)
{
sprintf(ch1, ch, comStr1[i], comStr1[i]);
system(ch1);
}
return 0;
}
㈡ 用c語言檢測某個程序是否運行,如果檢測到了便啟動另一個程序
可以藉助系統命令來檢測。
windows 用 tasklist 命令,linux 用 ps 命令。
c 使用 popen 函數來解析返回的字元串,一旦發現 xx 進程運行則用 system 函數啟動另一個程序。
如果需要持續檢測,用 while 加 sleep 輪詢。
㈢ C語言popen函數編譯(連接)的時候總說有一個error(錯誤),找不到原因求大神幫忙TAT
如果你是用的基於gcc的編譯器 這個代碼不會出問題 比如dev-C++ 或者C-free一類的
如果用VC或者VS 那這個就會出錯了
因為VC不支持popen而是_popen 需要改成
FILE *fp = _popen("tasklist", "r");
㈣ c語言popen的示例
#include <stdio.h>
int main(int argc, char *argv[])
{
char buf[128];
FILE *pp;
if( (pp = popen(ls -l, r)) == NULL )
{
printf(popen() error!
);
exit(1);
}
while(fgets(buf, sizeof buf, pp))
{
printf(%s, buf);
}
pclose(pp);
return 0;
}
㈤ 如何在C語言中調用cmd命令
在C語言中調用shell命令的方法實現。
C程序調用shell腳本共有兩種方法 :system()、popen(),分別如下:
system()
不用自己去創建進程,系統已經封裝了這一步,直接加入自己的命令即可
popen() 也可以實現執行的命令,比system
開銷小
以下分別說明:
1)system(shell命令或shell腳本路徑);
system()
會調用fork()產生 子歷程,由子歷程來調用/bin/sh-c string來履行 參數string字元串所代表的命令,此命令履行
完後隨即返回原調用的歷程。在調用system()期間SIGCHLD 信號會被暫時擱置,SIGINT和SIGQUIT 信號則會被漠視 。
返
回值:如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值。 如果
system()調用成功 則最後會返回履行 shell命令後的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因
此最好能再反省 errno 來確認履行 成功 。
system命令以其簡略
高效的作用得到很很廣泛 的利用 ,下面是一個例子
例:在/tmp/testDir/目錄下有shell腳本tsh.sh,內容為
#!/bin/sh
wget $1
echo "Done!"
2)popen(char
*command,char *type)
popen()
會調用fork()產生 子歷程,然後從子歷程中調用/bin/sh -c來履行 參數command的指令。參數type可應用
「r」代表讀取,「w」代表寫入。遵循此type值,popen()會建立 管道連到子歷程的標准 輸出設備 或標准 輸入設備
,然後返回一個文件指針。隨後歷程便可利用 此文件指針來讀取子歷程的輸出設備 或是寫入到子歷程的標准 輸入設備 中。此外,所有應用 文
件指針(FILE*)操作的函數也都可以應用 ,除了fclose()以外。
返回值:若成功
則返迴文件指針,否則返回NULL,差錯 原因存於errno中。注意:在編寫具SUID/SGID許可權的程序時請盡量避免應用
popen(),popen()會繼承環境變數,通過環境變數可能會造成系統安全的問題。
例:C程序popentest.c內容如下:
#include<stdio.h>
main
{
FILE * fp;
charbuffer[80];
fp=popen(「~/myprogram/test.sh」,」r」);
fgets(buffer,sizeof(buffer),fp);
printf(「%s」,buffer);
pclose(fp);
}
㈥ C語言的popen在win下可用嗎
可以在CYGWIN下或者MINGW下用,但是VC什麼的應該不可以
㈦ 求助C語言popen問題,一直返回為空
使用popen時,如果調用fork()或pipe()失敗,或者不能分配內存將返回NULL
㈧ c可以調用python嗎
可以的。
C中內嵌Python
新建立一個工程,首先需要將工作目錄設置到Python-3.1.1PCbuild中,以獲取到動態庫,至於靜態庫的包含,Include目錄的指定,那自然也是少不了的。文件中需要包含Python.h文件,這也是必須的。
介面中
Py_Initialize();
Py_Finalize();
其他的根據需求,再引入相應的python builder 即可
㈨ c語言popen的描述
popen() 函數 用 創建管道 的 方式 啟動 一個 進程, 並調用 shell. 因為 管道 是被定義成 單向的, 所以 type 參數 只能 定義成 只讀 或者 只寫, 不能是 兩者同時, 結果流 也相應的 是 只讀 或者 只寫.
command 參數 是 一個 字元串指針, 指向的 是 一個 以 null 結束符 結尾的字元串, 這個 字元串 包含 一個 shell 命令. 這個命令 被送到 /bin/sh 以 -c 參數 執行, 即由 shell 來執行. type 參數 也是 一個 指向 以 null 結束符 結尾的 字元串的指針, 這個字元串 必須是 'r' 或者 'w』 來指明 是 讀還是寫.
popen() 函數 的 返回值 是 一個 普通的 標准I/O流, 它只能用 pclose() 函數 來關閉, 而不是 fclose(). 函數. 向 這個流 的 寫入 被轉化為 對 command 命令的 標准輸入; 而 command 命令的 標准輸出 則是和 調用 popen(), 函數 的 進程 相同,除非 這個 被command命令 自己 改變. 相反的, 讀取 一個 「被popen了的」 流, 就相當於 讀取 command 命令的 標准輸出, 而 command 的 標准輸入 則是和 調用 popen, 函數的 進程 相同.
注意, popen 函數的 輸出流 默認是 被全緩沖的.
pclose 函數 等待 相關的進程 結束 並返回 一個 command 命令的 退出狀態, 就像 wait4 函數 一樣