環境は、windows10にcygwinで、どちらも64bitです。
その本にexecを使って、webページを開くプログラムの一部が書いてあるのですが上手くいきません。
具体的にはそのプログラムを実行すると、表示したいwebページのURLをタイトルとしたコマンドプロンプトが起動してしまいます。
どうしてこのような事が起こるのか、どうしたらwebページを表示できるようになるのかを知りたいです。
そのコードは次の通りです。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/wait.h>
void open_url(char *url);
void error(char *msg);
int main(int argc, char *argv[])
{
char *phrase = argv[1];
char *vars[] = {"RSS_FEED=http://rss.cnn.com/rss/edition.rss", NULL};
int fd[2];
if(pipe(fd) == -1){
error("パイプを作成できません");
}
pid_t pid = fork();
if(pid == -1){
error("プロセスをフォーク出来ません");
}
if(!pid){
close(fd[0]);
if(dup2(fd[1], 1) == -1){
error("標準出力をリダイレクトできません");
}
if(execle("c:/python27/python", "c:/python27/python", "./rssgossip.py", "-u", phrase, NULL, vars) == -1){
error("スクリプトを実行できません");
}
}
close(fd[1]);
if(dup2(fd[0], 0) == -1){
error("標準入力をリダイレクトできません");
}
char line[255];
while(fgets(line, 255, stdin)){
if(line[0] == '\t')
open_url(line + 1);
}
return 0;
}
void open_url(char *url){
puts(url);
pid_t pid = fork();
if(pid == -1){
error("プロセスをフォーク出来ません");
}
if(!pid){
if(execlp("cmd", "cmd", "/c", "start", url, NULL) == -1){
error("ブラウザを開けません");
}
}
int pid_status;
if(waitpid(pid, &pid_status, 0) == -1){
error("子プロセスの待機エラー");
}
}
void error(char *msg){
fprintf(stderr, "%s : %s\n", msg, strerror(errno));
exit(1);
}