C語(yǔ)言popen函數(shù)調(diào)用其他進(jìn)程返回值示例詳解
前言
當(dāng)我們想用C語(yǔ)言調(diào)用一個(gè)現(xiàn)有程序, 并且想獲取程序返回值而不是在終端輸出, 那么就必須調(diào)用popen( )
函數(shù)了.
popen( )
會(huì)創(chuàng)建一個(gè)管道, 并啟動(dòng)新進(jìn)程, 通過(guò)管道進(jìn)行進(jìn)程間通信。popen( )
返回一個(gè)文件指針,類(lèi)似fopen( )
, 只不過(guò)打開(kāi)的不是文件, 文件指針用來(lái)讀取或?qū)懭胱舆M(jìn)程的輸入/輸出。
popen( )
函數(shù)有兩種模式:讀模式r
和寫(xiě)模式w
。在讀模式下,從子進(jìn)程的輸出中讀取數(shù)據(jù);在寫(xiě)模式下,將數(shù)據(jù)寫(xiě)入子進(jìn)程的輸入。
一、popen( ) 函數(shù)原型
popen( )
在標(biāo)準(zhǔn)庫(kù)<stdio.h>
中的函數(shù)原型: man文檔
#include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream);
文件指針需要被回收, 用pclose( )
函數(shù).
二、使用示例 (AI提供)
以下代碼在Linux和Windows下都可以用, ls -l
是一個(gè)Linux命令, 用于顯示指定工作目錄下之內(nèi)容(列出目前工作目錄所含的文件及子目錄)。
#include <stdio.h> int main() { FILE *fp; char buffer[1024]; // 執(zhí)行命令并讀取輸出 fp = popen("ls -l", "r"); if (fp == NULL) { printf("無(wú)法執(zhí)行命令\n"); return 1; } // 讀取輸出并打印 while (fgets(buffer, sizeof(buffer), fp) != NULL) { printf("%s", buffer); } // 關(guān)閉文件指針 pclose(fp); return 0; }
總結(jié)
我在一篇文章中, 使用了 popen( )
函數(shù)調(diào)用 wmic cpu get
命令, 并將其輸出傳入程序, 判讀電腦cpu屬性.
雖然C語(yǔ)言課本不會(huì)介紹這個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù), 但既然這么有用, 還是掌握一下.
以上就是C語(yǔ)言popen( )函數(shù)調(diào)用其他進(jìn)程返回值的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言popen( )函數(shù)調(diào)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言基礎(chǔ)使用IDE快速開(kāi)發(fā)的方法
這篇文章主要介紹了C語(yǔ)言基礎(chǔ)使用IDE快速開(kāi)發(fā)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11C語(yǔ)言實(shí)現(xiàn)跨文件傳輸數(shù)據(jù)的幾種方式
C語(yǔ)言是一種強(qiáng)大的、通用的編程語(yǔ)言,常用于系統(tǒng)級(jí)編程,包括硬件交互,如中斷處理和數(shù)據(jù)采集,在本文中,我們將深入探討如何使用C語(yǔ)言進(jìn)行跨文件數(shù)據(jù)傳輸,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下2024-08-08基于C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼
這篇文章主要介紹了基于C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼,對(duì)于學(xué)習(xí)游戲開(kāi)發(fā)的朋友有一定的借鑒價(jià)值,需要的朋友可以參考下2014-08-08c語(yǔ)言實(shí)現(xiàn)MD5算法的項(xiàng)目實(shí)踐
MD5用于確保信息傳輸完整一致,是計(jì)算機(jī)廣泛使用的雜湊算法之一,本文主要介紹了c語(yǔ)言實(shí)現(xiàn)MD5算法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08C/C++實(shí)現(xiàn)捕獲所有信號(hào)的示例詳解
Linux的信號(hào)機(jī)制大部分情況下用不到,但是由于大部分信號(hào)的默認(rèn)處理是終止進(jìn)程,不正確處理會(huì)惹麻煩,所以我們來(lái)看看如何使用C/C++實(shí)現(xiàn)捕獲所有信號(hào)吧2024-03-03