1

私はcgiを介してバイナリファイル(例としてmp3ファイル)を提供しようとしています。ポイントは、Webサーバー自体ではなく、特別なスクリプトを介してのみファイルにアクセスできるようにしたいということです。今まで私は得た:

int main() {
    cgiWriteEnvironment("/CHANGE/THIS/PATH/capcgi.dat");
    cgiHeaderContentType("audio/mpeg");

    FILE *fp;
    fp=fopen("D:/something.mp3", "r");
    char buffer[4];

    while (!feof(fp)) {
        fread(buffer, 4, 1, fp);
        printf("%x",buffer);
    }


    return 0;
}

stdout に何かを出力しており、ブラウザーは vlc を開こうとしています (したがって、ヘッダーは正しいはずです...) が、プレイヤーはデータを処理できません :-(

4

1 に答える 1

1

.mp3ファイルを 16 進数、ASCII の 0 と 4 と C のシーケンスなどでエンコードしています。が必要ですfwrite()。これにより、書き込み中のバイトの元の形式が保持されます。また、4 バイトのバッファ サイズでも機能しますが、代わりに 4k (4048) または 8k (8192) バイトをお勧めします。最新のマシンでは問題ありませんが、 への呼び出しfread()は (比較的) 遅いため、できる限り少なくしたいと考えています。

また、これはかなり奇妙なことです。解決しようとしている問題は何ですか? 通常の Web サーバーでは解決できないのはなぜですか?

于 2012-05-22T14:58:47.167 に答える