在系统命令中使用命令行中的参数

时间:2013-04-10 07:09:20

标签: c unix system reverse

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main(int argc,char *argv[]){
int i,j;
for (i=0;i<argc;i++){
printf("Name: %s\n",argv[i]);
    char name[100];
    sprintf(name,"echo"| rev, argv[i]);
    system(name);

}

};

我有这个,我的问题是如何使用存储在argv [i]中的名称来反转文件, 我想要的是执行一个执行此命令的子进程“rev argv [i]”?

谢谢!

3 个答案:

答案 0 :(得分:3)

认为您需要更改第sprint()

sprintf(name,"rev %s", argv[i]);

嗯,你也应该在正确的参数上做到这一点,在所有参数上做这可能不是你想要的。

答案 1 :(得分:3)

您有正确的想法使用sprintf。但它需要像printf那样的格式说明符。 |是一个按位OR运算符,这里没有任何意义(如果它被定义,它会产生一个残缺的指针)。

snprintf(name, sizeof(name), "rev %s", argv[i]);

如果要修改名称为arg[i]的文件,则不能将输出重定向到同一文件,因为shell(由system用于执行命令)打开同时打开文件并打开文件以截断其长度。因此,您需要将输出重定向到另一个文件,然后在单独的命令中将其复制回原始文件。

snprintf(name, sizeof(name), "rev %s > %s.modified", argv[i], argv[i]);
system(name);
snprintf(name, sizeof(name), "mv %s.modified %s", argv[i], argv[i]);
system(name);

答案 2 :(得分:1)

请确保您使用sprintf

它必须是一个字符串,它显示了一些不纯的东西!! 检查一下。