如何在C文件中运行shell命令并在变量中分配一个整数?

时间:2013-03-20 07:00:02

标签: c linux bash

我正在尝试创建一个C文件,我需要运行一些shell命令。

我的任务

如果用户名为jhamb,则执行某项任务,否则执行其他任务。

我的代码

#include<stdio.h>

main() {
     char username[10];
     system("echo $USER | username");
     if(username == "jhamb")  {
         //PERFORM SPECIFIC TASKS
     }
     else {  
          // PERFORM OTHER TASKS
     }        
}

但它没有提供适当的输出。告诉我如何更正此代码。

编辑第1号

cat /etc/security/limits.conf | grep service | grep soft | awk '{print $4}'。此脚本提供输出13000

现在我想将这个13000存储在一个变量中。

如何在C文件中执行此操作?

6 个答案:

答案 0 :(得分:8)

使用getenv获取环境变量,例如USER

使用strcmp函数比较字符串是否相等。

答案 1 :(得分:2)

#include <stdio.h> //for popen
#include <string.h>    

char* cmd_system(const char* command)
{
    char* result = "";
    FILE *fpRead;
    fpRead = popen(command, "r");
    char buf[1024];
    memset(buf,'\0',sizeof(buf));
    while(fgets(buf,1024-1,fpRead)!=NULL)
    {
        result = buf;
    }
    if(fpRead!=NULL)
       pclose(fpRead);
    return result;
}

使用此功能,您可以获得返回值。

答案 2 :(得分:1)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char *username;
    username = getenv("USER");
    if(strcmp(username,"jhamb") == 0){
        printf("Yes\n");
    }else{
        printf("No\n");
    }
}

答案 3 :(得分:1)

如果你想执行一个linux命令,可以尝试使用函数system(),可以找到这个函数的摘要herer我也写了一个程序来显示它。程序显示如何使用命令“ls”

    #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
       int i;
       char *command;
       command = "ls";
       if(system(NULL))   printf("ok\n");
       else  exit(EXIT_FAILURE);
       i=system(command);
       printf(the value returned was:%d\n",i);
       return 0;
    }

答案 4 :(得分:0)

为什么不使用getlogin_r() unistd.h来获取当前用户名,然后在其上使用strcmp

请参阅getlogin_r

的手册页

答案 5 :(得分:0)

您的代码将echo $USER的结果输入到BASH命令username中。这与C变量username不同。

要捕获系统命令的输出,请使用popenThis page有一个很好的例子。为了您的目的,这样的事情应该有效:

#include <stdio.h>

main() {
    char username[50];
    FILE *in;
    extern FILE *popen();

    if(!(in = popen("echo $USER","r"))) {
        exit(-1);
    }

    fgets(username, sizeof(username), in);

    if(strcmp(username,"jhamb") == 0) {
        // proceed
    }
}

请特别注意,您应该使用strcmp来比较字符串。字符串本身只是指针,使用==测试指针指向内存中的相同位置,而不是字符串是否相同。