我正在尝试创建一个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文件中执行此操作?
答案 0 :(得分:8)
答案 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
不同。
要捕获系统命令的输出,请使用popen
。 This 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
来比较字符串。字符串本身只是指针,使用==
测试指针指向内存中的相同位置,而不是字符串是否相同。