无法识别execl()函数调用的行为

时间:2012-08-20 14:46:58

标签: c curl system

当我需要使用“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。 如何将程序输出存储在文本文件中?另外运行上面的命令在My Documents中创建并存储文本文件,我希望它在我运行程序的本地目录中。我怎么能这样做?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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的任何参数,或者如果你没有使用任何你明显可以省略它。