無錫做網(wǎng)站seo湘潭關(guān)鍵詞優(yōu)化服務(wù)
老林的C語言新課, 想快速入門點此 <C 語言編程核心突破>
C語言popen函數(shù)調(diào)用其他進程返回值
- 前言
- 一、popen( ) 函數(shù)原型
- 二、使用示例 (C 知道提供)
- 總結(jié)
前言
當(dāng)我們想用C語言調(diào)用一個現(xiàn)有程序, 并且想獲取程序返回值而不是在終端輸出, 那么就必須調(diào)用popen( )
函數(shù)了.
popen( )
會創(chuàng)建一個管道, 并啟動新進程, 通過管道進行進程間通信。popen( )
返回一個文件指針,類似fopen( )
, 只不過打開的不是文件, 文件指針用來讀取或?qū)懭胱舆M程的輸入/輸出。
popen( )
函數(shù)有兩種模式:讀模式r
和寫模式w
。在讀模式下,從子進程的輸出中讀取數(shù)據(jù);在寫模式下,將數(shù)據(jù)寫入子進程的輸入。
一、popen( ) 函數(shù)原型
popen( )
在標(biāo)準(zhǔn)庫<stdio.h>
中的函數(shù)原型: man文檔
#include <stdio.h>FILE *popen(const char *command, const char *type);int pclose(FILE *stream);
文件指針需要被回收, 用pclose( )
函數(shù).
二、使用示例 (C 知道提供)
以下代碼在Linux和Windows下都可以用, ls -l
是一個Linux命令, 用于顯示指定工作目錄下之內(nèi)容(列出目前工作目錄所含的文件及子目錄)。
#include <stdio.h>int main()
{FILE *fp;char buffer[1024];// 執(zhí)行命令并讀取輸出fp = popen("ls -l", "r");if (fp == NULL){printf("無法執(zhí)行命令\n");return 1;}// 讀取輸出并打印while (fgets(buffer, sizeof(buffer), fp) != NULL){printf("%s", buffer);}// 關(guān)閉文件指針pclose(fp);return 0;
}
總結(jié)
我在2022-12-11 Windows下如何用C/C++獲取cpu數(shù)量和物理核數(shù)文章中, 使用了 popen( )
函數(shù)調(diào)用 wmic cpu get
命令, 并將其輸出傳入程序, 判讀電腦cpu屬性.
雖然C語言課本不會介紹這個標(biāo)準(zhǔn)庫函數(shù), 但既然這么有用, 還是掌握一下.
老林的C語言新課, 想快速入門點此 <C 語言編程核心突破>