将c中的argv解析为unix

时间:2016-10-10 08:26:29

标签: c unix

我是unix的新手,需要一些帮助。

我有另一个程序调用projectc,它是位于另一个用户调用userb上的suid程序。 userb有一个目录传递,只有它的所有者(userb)

具有写入和读取权限

我正在尝试使用printf通过argv参数执行命令printf(system("cat /home/userb/pass")) 我可以直接在c代码printf(system("cat /home/userb/pass"))中执行此操作,但在argv参数中执行此操作,我无法执行此操作。) 无论如何要将argv[1]参数解析为命令吗?

这是我尝试在unix中运行的程序。

int main( int argc, char **argv){

    printf(argv[1]);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

printf(system("cat /home/userb/pass"))

这似乎起作用的原因是因为产生的子进程打印在屏幕上。 printf不仅不必要,而且实际上是一个错误。 printf的第一个参数是字符串(char*),而来自system的retrn值是int

正确的电话会是:

int success = system("cat /home/userb/pass");

如果argv[1]是您要运行的命令,则可以致电:

int status = system(argv[1]);

然后您可以像这样运行您的程序:

myprogram "cat /home/userb/pass"

请注意双引号 - 它们确保整个命令作为单个参数传递。没有引号,它将分为两个参数。

请调高编译器警告级别。编译时printf(system("cat /home/userb/pass"))应该给出一些重要的警告/错误。