-2

我正在尝试制作一个 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 文件中执行此操作?

4

6 回答 6

8

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

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

于 2013-03-20T07:01:56.970 回答
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;
}

use this function, and you can get the return value.

于 2013-03-20T07:06:30.503 回答
1

如果你想执行一个linux命令,你可以试试system()函数,这个函数的总结可以在这里找到也写了一个程序来展示它。程序展示了如何使用命令“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;
    }
于 2013-03-20T08:58:29.283 回答
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");
    }
}
于 2013-03-20T07:13:05.837 回答
0

为什么不使用getlogin_r()ofunistd.h来获取当前用户名然后使用strcmp它呢?

请参阅手册页getlogin_r

于 2013-03-20T07:09:20.810 回答
0

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

要捕获系统命令的输出,请使用popen. 这个页面有一个很好的例子。出于您的目的,这样的事情应该可以工作:

#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来比较字符串。字符串本身只是指针, using==测试指针是否指向内存中的同一位置,而不是字符串是否相同。

于 2013-03-20T07:12:04.310 回答