2

wwwからデータを取得するために「curl」を使用する必要があるときに、プロジェクトに取り組んでいました。最初に直接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

コードを返す場合は、子プロセスをforkしてコマンドを実行する必要があります。このようにして、戻りコードを確認できます。

#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 に答える