2

当我需要使用“curl”从 www 获取一些数据时,我正在处理我的项目。现在首先我尝试了直接 system() 函数但它没有工作,奇怪的是每次它在使用 gcc 编译时破坏了整个源代码文件。幸运的是,我正在单独测试它。然后我测试了 execl() 函数,这段代码编译正常,gcc 给了我一个 .exe 文件来运行,但是当我运行它时没有任何反应,出现空白窗口。代码:

    int main(){
        execl("curl","curl","http://livechat.rediff.com/sports/score/score.txt",">blahblah.txt",NULL);
         getch();
    return 0;
    }

包含未正确显示,但我已包含 stdio、conio、stdlib 和 unistd.h。如何获取程序的输出以存储在文本文件中?同样运行上述命令会在我的文档中创建和存储文本文件,我希望它位于我运行程序的本地目录中。我怎样才能做到这一点?

4

2 回答 2

2

需要提供 curl 的路径,并且不能使用重定向,因为应用程序不会通过 bash 执行。而是使用-o标志并指定文件名。此外,execl成功时不返回:

#include <unistd.h>
#include <stdio.h>
int main(){
  execl("/usr/bin/curl",
        "curl","http://livechat.rediff.com/sports/score/score.txt",
        "-oblahblah.txt",NULL
  );
  printf("error\n");
  return 0;
}
于 2012-08-20T15:07:24.650 回答
1

如果您希望您的代码返回,您应该派生一个子进程来运行该命令。这样您就可以检查返回码。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

#define CURL "/usr/bin/curl"

int main()
{
  pid_t pid;
  int status;

  pid = fork();

  if (pid == 0)
  {
    execl(CURL, CURL, arg1, NULL);
  }

  else if (pid < 0)
  {
    printf("Fork failed\n");
    exit (1);
  }

  else
  {
    if (waitpid(pid, &status, 0) != pid)
      status = -1;
  }

  return status;
}

arg1 是您想与 curl 一起使用的任何参数,或者如果您没有使用任何参数,那么您显然可以省略它。

于 2012-08-20T15:15:52.987 回答