ギリギリ行けるお一人様のライン

fopenについて質問があります。

fopenでファイルを開くとき、
 fopen("http://~~~.php?A=1","r") 
のようにURLを指定できるのでしょうか。

A 回答 (6件)

fopenはファイルをストリームとしてオープンする関数なので、できません。



どうしても、ということであれば、以下のようにすれば可能です。

BSDやLinuxをはじめとする環境で、いわゆる"the unix berkley socket library"をつかえるなら、socket(2)でSOCK_STREAMを指定して得られたディスクリプタをconnect(2)成功後にfdopen(3)に渡してやれば、ストリームとして処理することも可能です。この手法はwindows上ではcygwinで利用可能です。残念ながらWinsockではソケットハンドルはファイルディスクリプタと等価ではないので、この手法は使えません。

ただし、この場合はTCP上での通信がすべてこのストリーム上に乗るので、HTTPであれば

GET /hogehoge.php?A=1 HTTP/1.1
Host: www.example.com
(以下略)
などと送信しなければなりませんし、

HTTP/1.1 200 OK
Date: ~~~~~
(以下略)
などと全部のHTTP応答の処理もする必要があります。

多分、あなたが思っているものとは違ったのではないでしょうか。
    • good
    • 0
この回答へのお礼

不明確な質問にも関わらず、お答え頂きありがとうございます。UNIXを使っています。
C言語のみで実装するのは、ちょっと難しそうですね。。実は、もっと簡単にいくのでは、と甘く見ていました。。せっかく方法を教えていただいたのに本当に申し訳ないですが、知識不足でわからない点もあるので、調べて見ようと思います。

お礼日時:2006/02/22 15:34

> プログラム上でURLをオープンして、


> そこに書いてある文字が0か1かによって、
> 処理を制御したかったのですが、不可能なのでしょうか。。。。

ハードウェアや運用環境まで含めて、何を使ってもよいのであれば、可能か不可能化でいえば可能です。「C言語」だけで実現するのであれば、一般的には不可能です。
つまり、ここから先のことが知りたければ、最低限どんな処理系を使っているかぐらいは書きましょう。

例えば、インターネットに接続できないような環境であれば、どんなに頑張っても不可能です。マイコン用の処理系のように、fopen等ストリームライブラリの低水準関数をユーザーが定義するようになっている処理系であれば、LANコントローラがあるなら、プロトコルスタックを自作するなりして、fopenやfgetc等で使えるようにすることも可能といえば可能です。
    • good
    • 0

#3です。



fopenでは、不可能と考えても支障はないと思います。
別の手段が必要です。

環境依存なので環境が分からないと使えるかも分かりませんが、例えば Windows であれば、Internet API (InternetOpenUrl 等)が比較的簡単に URL の先を開ける手段かと思います。
# もちろん、Windows 以外の OS 上では別の手段が必要です。
# http のプロトコルに従い Socket で処理を書く手段もあります。
    • good
    • 0

単に文字列なので指定はできると思いますが、おそらくお望みの動作をせずに、オープン失敗のエラーが返るものと思われます。



fopen について規格書(ISO/IEC9899:1999)では、以下のように規定されています。
<引用>
2 The fopen function opens the file whose name is the string pointed to by filename, and associates a stream with it.
</引用>
URL を filename として取り扱うような filesystem 上で
のお話か、標準ライブラリ実装の独自拡張なら取り扱えるかもしれませんが、現行の PC 上であれば、おそらく取り扱えない実装の方が一般的と思います。

結果として、前述のようにエラーが返る可能性が最も高く、仮にオープンできたとしても、環境依存にならざるをえません。
    • good
    • 0
この回答へのお礼

皆様、ご回答ありがとうございます。

プログラム上でURLをオープンして、
そこに書いてある文字が0か1かによって、
処理を制御したかったのですが、不可能なのでしょうか。。。。

お礼日時:2006/02/22 14:24

> fopenでファイルを開くとき、


>  fopen("http://~~~.php?A=1","r") 
> のようにURLを指定できるのでしょうか。

できるかどうかは、標準ライブラリの実装に依存します。
    • good
    • 0

fopen()はstdio.hで(多分)定義されている関数なので、ネットワークアクセスは出来ません。



ネットワークポートを使用したI/Oはそれ専用の関数があるのでそちらを利用することになります。
Windowsならwinsock.hやwinsok2.h。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報