C语言编程实现 linux 系统调用并统计结果

/*

功能:

在linux系统中,C语言编程中往往需要执行系统调用,在系统调用后需要统计执行结果的内容,下面的代码可以实现

*/

 

#include
#include
#include
#include
#include
int atoia(char s[])
{  
    int i = 0;  
    int n = 0;  
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    {  
        n = 10 * n + (s[i] - '0');
    }  
    return n;
}
int exec_comand(const char *s )
{
    int cnt =0;
    printf("comand = %s\n",s);
    char result_buf[1024];
    char command[1024];
    int rc = 0; // 用于接收命令返回值
    FILE *fp;
    /*将要执行的命令写入buf*/
    snprintf(command, sizeof(command), s);
    /*执行预先设定的命令,并读出该命令的标准输出*/
    fp = popen(command, "r");
    if(NULL == fp)
    {
        perror("popen exec failed!");
        exit(1);
    }
    while(fgets(result_buf, sizeof(result_buf), fp) != NULL)
    {
       printf("%s, %s\n", command, result_buf);
       cnt = atoi(result_buf);
       printf("cntheihei==%d\n",cnt);
    }
    /*等待命令执行完毕并关闭管道及文件指针*/
    rc = pclose(fp);
    if(-1 == rc)
    {
        perror("close file* failed\n");
        exit(1);
    }
    else
    {
       printf("command %s child process finish state [%d] return [%d] \r\n", command, rc, WEXITSTATUS(rc));
    }
    return cnt;
}
int main()
{
   char *ss = "cat /home/alpha/aa.txt | grep aa | awk '{print $1}'";
   int cc = exec_comand(ss);
   printf("cc = %d\n",cc);
   return 0;
}

你可能感兴趣的:(Linux系统编程)