合計 昨日 今日

execでwebページが開けない

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: ハワルド
[URL]
ぴよぴよ(909 ポイント)
Date: 2017年3月13日(月) 21:59
No: 1
(OFFLINE)

 execでwebページが開けない

現在ある書籍でC言語を勉強しています。
環境は、windows10にcygwinで、どちらも64bitです。
その本にexecを使って、webページを開くプログラムの一部が書いてあるのですが上手くいきません。
具体的にはそのプログラムを実行すると、表示したいwebページのURLをタイトルとしたコマンドプロンプトが起動してしまいます。
どうしてこのような事が起こるのか、どうしたらwebページを表示できるようになるのかを知りたいです。
そのコードは次の通りです。

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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);
}

Name: Math
[URL]
Date: 2017年3月14日(火) 08:01
No: 2
(OFFLINE)

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

>現在ある書籍でC言語を勉強しています
”ある書籍”はWindowsの書籍ですか。Unixの書籍ではないですよね!

コード[C++]: 全て選択
1
2
3
4
5
6
#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が動きます。)

Name: ハワルド
[URL]
ぴよぴよ(909 ポイント)
Date: 2017年3月14日(火) 15:18
No: 3
(OFFLINE)

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

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

Name: ハワルド
[URL]
ぴよぴよ(909 ポイント)
Date: 2017年3月14日(火) 15:20
No: 4
(OFFLINE)

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

[解決!]

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

Name: みけCAT
[URL]
伝説なるハッカー(670,603 ポイント)
Date: 2017年3月14日(火) 21:29
No: 5
(ONLINE)

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

Math さんが書きました:
コード[C++]: 全て選択
1
#include <stdio.h>      //◆stadard io header---Windows

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

Name: Math
[URL]
Date: 2017年3月16日(木) 20:00
No: 6
(OFFLINE)

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

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: 梅衣堂ひよ & ゲスト[9人]