【问题标题】:Loop in system call C program在系统调用 C 程序中循环
【发布时间】:2014-12-02 11:53:01
【问题描述】:

我想在ubuntu中循环调用函数wget,我该怎么做呢?我就是这样做的,但是没有用。

for (i = 1; i < 500; ++i)
{
    system("wget -O page%i 'http://www.asdf.com/?=%i'", i, i);
}

【问题讨论】:

  • 定义“它不起作用”。发生了什么?
  • 如果你想用参数调用wget,那么你应该使用execl()
  • 你可以将你的命令 sprintf() 转换成一个字符串,然后用这个字符串调用 system()
  • 如果您不想从 C 程序中运行它,请查看seqxargs 命令行工具。
  • 也许每个 wget 之间会稍作停顿,只是出于礼貌?

标签: c loops


【解决方案1】:

你不能这样用,你需要用sprintf

char cmd[50]={0};
for (i = 1; i < 500; ++i)
{
    sprintf(cmd,"wget -O page%i 'http://www.asdf.com/?=%i'",i,i);
    system(cmd);
}

或者您可以使用snprintf,它还可以通过限制要复制的字符串的大小来防止缓冲区溢出。要使用它,只需将上面代码中的sprintf替换为

snprintf(cmd,sizeof(cmd),"wget -O page%i 'http://www.asdf.com/?=%i'",i,i);

【讨论】:

  • 首选 snprintf,您可以在其中传递结果缓冲区的大小以避免溢出
  • 编辑了答案以包含它。
猜你喜欢
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 2022-06-15
  • 2019-07-06
相关资源
最近更新 更多