-2

コンマ区切りのフィールドを使用して、通常のファイルに 1 つのレコードとして書き込みたい構造があります。例えば

    struct A {
      int a;
      int b;
   } test;

と が与えられるtest.a=1test.b = 2、通常のファイルには対応する1,2が 1 行のレコードとして含まれます。もう 1 つの要件は、1 つのシステム コールで構造全体を記述したいということです。だから、私は を作成しchar buffer[10]、 int a,b の値をバッファに格納し、コンマ区切りと改行文字を使用し、Linux システムの write() 呼び出しを使用してバッファを書き込みました。

問題は、レコードがファイル内でバイナリとして終了することです。変数から「型」を取り除いたので、これは直感的です。変数をchar配列に格納した瞬間です。標準のioを使用できますが、概説された制約を使用して標準のLinuxシステムコールで目的の結果を達成する方法を学びたいです。変数の「型」を維持するにはどうすればよいですか。型とは、変数が int 型の場合、通常のファイルには人間が読める数字が必要であることを意味します。

4

3 に答える 3

5

あなたがしようとしているのはfprintf(fh, "%d,%d\n", test.a, test.b);、出力ファイルをfopen. write()何らかの理由でどうしても使用しなければならない場合は、 sprintf(buffer, "%d,%d\n", test.a, test.b); write(fd, buffer, strlen(buffer));.

于 2013-01-14T16:59:18.763 に答える
2

fprintf(fh, "struct:A{int:%d,int:%d}\n", test.a, test.b);

一部の環境では、次のように記述できる場合があります。

fprintf(fh, "struct:%s{%s:%d,%s:%d}\n", typeid(A).name(), typeid(test.a).name(), test.a, typeid(test.b).name(), test.b);

于 2013-01-14T17:22:36.377 に答える
1

ファイルを人間が読めるようにする場合は、fprintfを使用し、次のようなコードを使用してファイルを記述します

void writeArrayToFile(struct A* array, int count)
{
    int i;
    FILE* fp;
    // open file

    for (i=0; i<count; i++) {
        fprintf(fp, "%d,%d\n", array[i].a, array[i].b);
    }
    fclose(fp);
}
于 2013-01-14T16:56:46.193 に答える