こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGIコンパイルエラーについての質問

CGIコンパイルエラーについての質問

gcc ppp.c -o pppとコンパイルしたらerrorが出てしまいます
io.h そのようなファイルやディレクトリは存在しませんとでます
CentOS Vware Playerを使っています

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#include <time.h>

void showimg(char []);

int main(void)
{
int no;
char *imgfile[] = {"img1.jpg","img2.jpg","img3.jpg"};

srand((unsigned int)time(NULL));
no = rand() % 3;

printf("Content-type: image/jpeg\n\n");
showimg(imgfile[no]);

return 0;
}

void showimg(char imgfile[])
{
FILE *fp;
char buf[1024];
int i, size;

fp = fopen(imgfile, "rb");
if(fp != NULL) {
_setmode(_fileno(stdout), _O_BINARY);
while((size = fread( buf, sizeof(unsigned char), 1024, fp )) != 0) {
for(i = 0 ; i < size ; i++) {
printf("%c", buf[i]);
}
}
fclose(fp);
fflush(stdout);
_setmode(_fileno(stdout), _O_TEXT);
}
}

このプログラムを正しくコンパイルできて画像をランダムに表示できるようにしたいです
どなたかお教えください

投稿日時 - 2012-02-02 10:51:01

QNo.7280690

困ってます

質問者が選んだベストアンサー

CentOSのバージョンが不明…ですけどねぇ…。

[user@localhost ~]$ rpm -qf /usr/include/sys/io.h
glibc-headers-2.5-65.el5_7.1
[user@localhost ~]$
ということで、CentOS5.7では「glibc-headers-2.5-65.el5_7.1」のパッケージが入っている必要があります。
# というか既に入っているんじゃないですか??

上記のコードだけなら…io.hは要らないんじゃないかとも思いますが……
# 使うなら…<sys/io.h>ですかねぇ。

で……
ヘッダを修正しても、_O_BINARY等でエラーになります。
_setmode()自体が見当たらない……ですかねぇ。
stdoutに対してfwrite()で書き込めばバイナリモードで出力できる。
とありますけど。


まぁ、それでもこのコードには問題がありますけどね。
・コンテンツのサイズが不明。(CGIの呼び出し元で付けてくれますかねぇ…)
・fopen()の時の失敗する可能性がある。(カレントディレクトリにimg1.jpg、img2.jpg、img3.jpgがありますかねぇ?)

投稿日時 - 2012-02-02 11:46:55

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-