繁体   English   中英

如何在C中将字符串传递给popen()命令?

[英]How Do I Pipe a String Into a popen() Command in C?

我在uni(或多或少是第一次)为uni工作,我需要从字符数组生成MD5。 赋值指定必须通过创建管道并在系统上执行md5命令来完成此操作。

我到目前为止:

FILE *in;
extern FILE * popen();
char buff[512];

/* popen creates a pipe so we can read the output
 * of the program we are invoking */
char command[260] = "md5 ";
strcat(command, (char*) file->name);
if (!(in = popen(command, "r"))) {
    printf("ERROR: failed to open pipe\n");
    end(EXIT_FAILURE);
}

现在这完美地工作(对于需要获取文件的MD5的任务的另一部分)但是我不能锻炼如何将字符串输入其中。

如果我理解正确,我需要做以下事情:

FILE * file = popen("/bin/cat", "w");
fwrite("hello", 5, file);
pclose(file);

我认为,它会执行cat,并通过StdIn将“hello”传递给它。 这是正确的吗?

如果你需要在md5程序中输入一个字符串,那么你需要知道你的md5程序使用的选项。

  • 如果它在命令行上显式地使用了一个字符串,那么使用它:

     md5 -s 'string to be hashed' 
  • 如果在命令行中没有给出文件名,则采用标准输入,则使用:

     echo 'string to be hashed' | md5 
  • 如果它绝对坚持文件名并且您的系统支持/dev/stdin/dev/fd/0 ,那么使用:

     echo 'string to be hashed' | md5 /dev/stdin 
  • 如果以上都不适用,那么您必须在磁盘上创建一个文件,在其上运行md5 ,然后删除该文件:

     echo 'string to be hashed' > file.$$; md5 file.$$; rm -f file.$$ 

请参阅上面的评论:

FILE* file = popen("/sbin/md5","w");
fwrite("test", sizeof(char), 4, file);
pclose(file);

产生一个md5总和

尝试这个:

static char command[256];
snprintf(command, 256, "md5 -qs '%s'", "your string goes here");
FILE* md5 = popen(md5, "r");
static char result[256];
if (fgets(result, 256, md5)) {
     // got it
}

如果你真的想把它写到md5的stdin,然后从md5的stdout读取,你可能会想要四处寻找popen2(...)的实现。 但这通常不在C库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM