popen、system

1、popen函数

 popen()通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。
这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

功能:执行shell命令,并读取此命令的返回值。
参数:command:一个指向以NULL结束的shell命令字符串的指针
      type:只能是读或写("r"或"w")
返回:如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流



2、system函数

 system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程

#include <stdlib.h>
int system(const char *command);

函数:int system(const char *command)
功能:执行shell命令
参数:command:一个指向以NULL结束的shell命令字符串的指针
返回: -1 :fork()失败
    127 :exec()失败
   other:子shell的终止状态



3、例子

#include <stdio.h>
int main()
{
    FILE *fp   = NULL;
    char buf[100] = {0};
    fp = popen("cat /tmp/test", "r");
    if(NULL == fp)
    {
        printf("popen() erro!!!");
        return -1;
    }

    while(NULL != fgets(buf, sizeof(buf), fp))
    {
        printf("%s", buf);
    }

    pclose(fp);
    return 0;
}

fp = popen("date > /tmp/test", "w");
fwrite(buf, 1, sizeof(buf), fp);
上一篇:如何使用性能分析工具观察cpu性能指标


下一篇:AJAX_NOTE