0

私は比較的まともなJavaプログラマーですが、Cはまったく初めてです。したがって、これらの関数やポインターなどのいくつかは、私にいくつかの問題を引き起こしています...

アーカイブファイルを作成しようとしています(基本的にar sys呼び出しを書き直しています)。必要なファイルをfstatし、必要な情報を定義した構造体に格納できます。しかし、今、私の問題が発生します。構造体をアーカイブファイルに書き込みたい。sprintf()そのため、構造体をバッファに入れて、バッファに書き込むために使用できると考えていました。

sprintf(stat_buffer, "%s", file_struct);
write(fd, stat_buffer, 60);

これは機能していないようです。アーカイブファイルのサイズが目的の60バイト増加していることはわかりますがcat、ファイルを使用すると意味がありません。

また、ファイルの実際の内容を書き込もうとしても機能しません...

    while (iosize = read(fd2, text_buffer, 512) > 0) {
        write(fd, text_buffer, iosize);
        if (iosize == -1) {
            perror("read");
            exit(1);
        }
    }

これは比較的簡単な修正だと確信していますが、それが何であるかについては興味があります。

ありがとう!

4

1 に答える 1

2

%s文字列を印刷するために使用されます。そのため、スプリントは\0キャラクターと出会うと停止します。

代わりに、構造をファイルに直接書き込むことができます。write(fd, &file_struct, sizeof(filestruct));しかし、猫の鳴き声でそれを読むことはできません。別のアンアーカイバープログラムから、ファイルの内容を読み取って構造体に保存することもできますread(fd, &filestruct, sizeof(filestruct));

このシステムは、コンピュータのエンディアンを使用して構造を保存し、ポータブルではないため、とにかく完璧ではありません。正しく実行したい場合は、arファイル形式の仕様を確認してください。

于 2012-09-30T22:47:41.120 に答える