AN HTTPD ゲストブック/コメント集(2001年11月28日11:37)


naomi nishibon2001@mail.goo.ne.jp 2001/11/29 10:46

中田さん。
いつも適確なアドバイスありがとうございます。
 setmode( fileno(stdout), O_BINARY );
をfwriteの前に挿入しましたところ、無事表示できました!
ちょっと感動… (~O~)

ありがとうございました。


中田昭雄 nakata@st.rim.or.jp 2001/11/28 21:22

naomi さん、
Windows では標準入出力はデフォルトでテキストモードですから、もちろんバイナリモードにしないといけません。
通常 C では setmode を使うと思います。
"\015\012" を出すのであれば、最初の printf の前に標準出力をバイナリにする必要があるでしょう。
"\012" であれば fwrite の前でいいわけですが。


naomi nishibon2001@mail.goo.ne.jp 2001/11/28 11:37

JPEG画像の元となるバイナリコードを読み込ませて
画像表示をしたいのですが、うまく動作せずに困っております。

HTMLにおいては
<IMG SRC="test.cgi" BORDER="0" NAME="test" WIDTH="320" HEIGHT="240">
というように記載し、cgiファイルを呼び出すようにしております。
以下にcgiファイル内容を示します。

DOSウィンドウではバイナリデータは出力されている様子が
確認できるのですが、ブラウザページでは画像表示されません。

こういった内容に関して少し調べてみたのですが
Perlではbinmodeを使ってバイナリに切り替えを行ったりしていますが
C言語で処理を行う場合、これに対応するようなコマンドが
何か必要になってくるのでしょうか?
もし、必要となる場合、どのようにすればよいのでしょうか?

また、私は98SEの環境でTESTしているのですが
98SEでは他にも特別な対応が必要なのでしょうか?

長くなりましたが、よろしくお願い致します。

#include <stdio.h> 
#include <string.h>

int main()
{
char buf[32];
static const
unsigned char img_data[] =
{
0xff, 0xd8, 0xff, 0xe1, 0x22, 0x48, 0x45,
0x78, 0x69, 0x66, 0x00, 0x00, 0x49, 0x49,
0x2a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0b,
...(バイナリデータ省略)
};

printf("HTTP/1.0 200 OK\015\012");
printf("Content-Type: image/jpeg\015\012");
sprintf( buf, "Content-Length: %d\015\012", sizeof(img_data) );
printf( buf );
printf("\015\012");
fwrite(img_data, sizeof(img_data), 1, stdout);

return 0;
}