execでwebページが開けない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ハワルド
記事: 16
登録日時: 1年前

execでwebページが開けない

#1

投稿記事 by ハワルド » 1年前

現在ある書籍で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);
}

Math

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

#2

投稿記事 by Math » 1年前

>現在ある書籍で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]

ハワルド
記事: 16
登録日時: 1年前

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

#3

投稿記事 by ハワルド » 1年前

Unixを前提として書かれていますが、windowsの場合はCygwinを入れると良いとも書いてありました
それを使ってエラーは出ていないはずですが・・・

ハワルド
記事: 16
登録日時: 1年前

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

#4

投稿記事 by ハワルド » 1年前

cmd /c start ではなく、cygstart を使用したらブラウザでwebページを開くことができました。

アバター
みけCAT
記事: 6003
登録日時: 7年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 1年前

Math さんが書きました:

コード: 全て選択

#include <stdio.h>      //◆stadard io header---Windows
stdio.hは規格にも載っている一般的なヘッダであり、Windowsは関係ないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Math

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

#6

投稿記事 by Math » 1年前

>stdio.hは規格にも載っている一般的なヘッダであり、Windowsは関係ないでしょう。
あわわ、失礼しました。どう見ても”Unix"のソースですよね!。

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

返信

“C言語何でも質問掲示板” へ戻る