`
pipal
  • 浏览: 166697 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Linux下popen的使用

阅读更多

C语言里有个popen函数,用来捕获shell里命令的输出,这样C和shell也可以相互通信了。在网上看了个例子修改了一下,原文:http://blogold.chinaunix.net/u/16292/showart_393022.html

 

/*

作用:演示popen用法,将源程序输出到argv[1]命名的文件中

使用:argv[0] outputFile

*/

#include <sys/types.h>  
#include <unistd.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>

#define CMDLEN  1024

int main(int argc, char** argv)  
{  
    do
    {
      if ( 2 != argc)
      {
        printf("Usage:%s outputFile!\n",argv[0]);
        break;
      }
      
      FILE   *stream;  
      FILE    *wstream;
      char   buf[1024]; 
      char   myCmd[CMDLEN];
      memset(myCmd,0,CMDLEN); 
      strcpy(myCmd,"cat ");
      strcat(myCmd,argv[0]);
      strcat(myCmd,".c");
      memset( buf, '\0', sizeof(buf) );//初始化buf,以免后面写如乱码到文件中
      stream = popen( myCmd, "r" ); //将myCmd命令的输出 通过管道读取(“r”参数)到FILE* stream
      wstream = fopen( argv[1], "w+"); //新建一个可写的文件

      fread( buf, sizeof(char), sizeof(buf),  stream);  //将刚刚FILE* stream的数据流读取到buf中
      fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE    *wstream对应的流中,也是写到文件中
      
      pclose( stream );  
      fclose( wstream );
    }while(0);
    return 0;
}   

 

 

分享到:
评论

相关推荐

    Linux系统中popen函数的缺陷与改造方案.pdf

    "Linux系统中popen函数的缺陷与改造方案" Linux 操作系统中,popen 函数是一个常用的函数,用于执行 shell 命令并得到执行结果。然而,Linux 库提供的 popen 函数却有两个致命的缺陷。本文将分析这两个缺陷产生的...

    Linux下使用popen()执行shell命令.docx

    Linux 下使用 popen() 执行 shell 命令 在 Linux 操作系统中,popen() 函数是一个强大的工具,允许开发者执行 shell 命令并获取其输出结果。popen() 函数通过创建一个管道,调用 fork() 产生一个子进程,执行一个 ...

    linux popen函数

    在Linux系统中,`popen`函数是一个非常实用的C语言标准库函数,它允许程序以进程间通信(IPC,Inter-Process Communication)的方式与另一个命令或者程序进行交互。`popen`函数在`stdio.h`头文件中定义,它的主要...

    Linux中popen函数的作用小结

    在Linux系统中,`popen()`函数是一个非常实用的函数,它允许程序与其他程序进行交互,通常是执行系统命令并读写其输出。`popen()`是C标准库`stdio.h`的一部分,它通过创建管道(pipe)并在子进程中运行一个shell来...

    popen 获取ip ,mask,dns等1.2 测试ok

    最近在做web服务器端处理。刚好用到要在服务器端调用popen函数查询相关命令,并上传到前端。所以在服务器端做的查询ip,mask等的测试代码。在linux下编译运行即可得到需要的值。代码简单。

    跨平台实现异步执行命令,类似popen,可同时读写

    首先,我们需要了解在Windows和Unix-like系统(如Linux、macOS)中实现异步命令执行的不同方法。在Windows中,我们可以使用CreateProcess和CreatePipe函数来启动新的进程并与之通信。CreateProcess可以创建一个新的...

    tcps.zip_linux 远程控制_popen

    在这个场景中,我们看到的`tcps.zip_linux 远程控制_popen`主题是关于在Linux环境下,利用管道(pipe)和`popen`函数来实现远程控制功能。 首先,我们要理解`popen`函数的工作原理。`popen`函数创建一个新的进程,...

    如何解决fgets读取popen内容阻塞的问题

    fgets 读取 popen 内容阻塞的问题是一个常见的 Linux 应用程序开发中遇到的问题。该问题的解决方案涉及到 Linux 操作系统中进程间通信、管道和文件指针的使用。 在 Linux 系统中,一个父进程可以通过 fork 和 exec ...

    Linux下面向函数的动态内存泄漏监测.pdf

    本文提出了一种面向函数的动态内存泄漏检测方法,该方法关注于在Linux环境下对内存泄漏进行更精确的追踪和分析。 内存泄漏通常发生在程序分配动态内存后,未能在不再需要时释放它。虽然小型程序可能不会立即受其...

    fork、exec系列与system、popen区别.rar_UNIX popen_linux system pop_pop

    在UNIX和Linux操作系统中,进程创建和控制是通过一系列系统调用来实现的,其中最常见的是`fork`、`exec`系列以及`system`和`popen`函数。这些调用各自有不同的特性和用途,理解它们的区别对于进行系统级编程至关重要...

    Linux下使用python调用top命令获得CPU利用率

    本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况。 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 复制代码 代码如下: top -bi &gt; cpuHistory.log 或 复制代码 代码...

    Python3 执行Linux Bash命令的方法

    和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令。 方法一:system调用 #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os....

    func_popen.rar

    `popen`函数在C语言中被广泛用于启动一个子进程,并与之进行I/O通信,但在这个特定的情况下,由于频繁使用`popen`可能导致某些异常,因此开发者选择了使用`fork`系统调用来创建子进程作为替代方案。 在Linux操作...

    linux下检测网卡与网线连通状态

    ### Linux下检测网卡与网线连通状态 在Linux环境下,经常需要对网络设备的状态进行检查,确保网络连接正常工作。本文将详细介绍如何通过Linux命令行工具来检测网卡与网线的连通状态,并提供一个使用C语言实现该功能...

    popen 实现c/s模式shell功能

    Linux系统。同一主机,ip为本地回环 “127.0.0.1” 需求概述 完成一个以socket套接字为基础的c/s服务器程序,该程序通过客户端与服务器端连接后,实现一个交互式SHELL的功能。 其中服务端用popen来创建子...

    loadcmd.rar_pOPENLOAD_popen

    在`module_load.c`和`module_load.h`中,可能包含了一个示例,演示如何使用`popen`来加载Linux内核模块。通常,这会涉及到使用`insmod`, `rmmod`等命令,这些命令用于动态插入或移除内核模块。 4. **安全与注意...

    linux C程序中获取shell脚本输出(如获取system命令输出)

    通过以上介绍和示例代码分析,我们可以看到在Linux C程序中使用`popen()`函数来获取shell命令的输出是一种非常实用且高效的方法。它不仅可以简化代码逻辑,还能提高程序的可维护性和扩展性。对于那些需要频繁执行...

    Linux环境下Qt4图形界面与MySQL 源代码

    在Linux环境中,开发者可能还会用到一些特定的系统调用,如使用system()执行shell命令,或者通过popen()和pclose()进行进程通信。 至于MySQL的使用,初学者需要了解基本的SQL语法,如CREATE DATABASE、CREATE TABLE...

    getmac-linux.rar_linux getmac_linux 取mac_网卡物理地址_获取网卡物理地址

    - 文件`1.cpp`:可能展示了如何使用`popen()`和`pclose()`来读取`/sys/class/net`目录下的`address`文件。 - 文件`2.cpp`:可能利用`fopen()`和`fgets()`直接读取`/sys/class/net`或`/proc/net/dev`。 - 文件`3.cpp`...

Global site tag (gtag.js) - Google Analytics