ページ 11

execでwebページが開けない

Posted: 2017年3月13日(月) 21:59
by ハワルド
現在ある書籍でC言語を勉強しています。
環境は、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);
}

Re: execでwebページが開けない

Posted: 2017年3月14日(火) 08:01
by Math
>現在ある書籍でC言語を勉強しています
”ある書籍”はWindowsの書籍ですか。Unixの書籍ではないですよね!

コード:

#include <stdio.h>      //◆stadard io header---Windows
#include <stdlib.h>
#include <unistd.h>     //◆unix stadard header---Unix
#include <string.h>
#include <errno.h>
#include <sys/wait.h>
まずプログラムにエラーがでるのをなくしましょう!。
(Windows10はbashを有効化してUbuntuをいれればネーティブでLinuxが動きます。)
[/size]

Re: execでwebページが開けない

Posted: 2017年3月14日(火) 15:18
by ハワルド
Unixを前提として書かれていますが、windowsの場合はCygwinを入れると良いとも書いてありました
それを使ってエラーは出ていないはずですが・・・

Re: execでwebページが開けない

Posted: 2017年3月14日(火) 15:20
by ハワルド
cmd /c start ではなく、cygstart を使用したらブラウザでwebページを開くことができました。

Re: execでwebページが開けない

Posted: 2017年3月14日(火) 21:29
by みけCAT
Math さんが書きました:

コード:

#include <stdio.h>      //◆stadard io header---Windows
stdio.hは規格にも載っている一般的なヘッダであり、Windowsは関係ないでしょう。

Re: execでwebページが開けない

Posted: 2017年3月16日(木) 20:00
by Math
>stdio.hは規格にも載っている一般的なヘッダであり、Windowsは関係ないでしょう。
あわわ、失礼しました。どう見ても”Unix"のソースですよね!。

>windowsの場合はCygwinを入れると良いとも書いてありました
CygwinはCygwin1.dllランタイムライブラリがPOSIXをエミュレータできたのですね!。
https://ja.wikipedia.org/wiki/Cygwin
Microsoftは国策に合わせてWindowsNT(約20年前)をUnixのPOSIXに認定させてましたね!。
でもWindows10はネーティブLinuxが動きますね!。