当我需要使用“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中创建并存储文本文件,我希望它在我运行程序的本地目录中。我怎么能这样做?
答案 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的任何参数,或者如果你没有使用任何你明显可以省略它。