0

UNIX のwrite()システム コール double temp = 6.5;に渡す方法を考えると、次のようになります。

write(fd[1], (WTF?), 100)

  1. fd[1]ファイル記述子です。
  2. 100念のため、大きな数値を処理するための固定バッファ サイズです。

真ん中に何を入れる?私はitoa&temp*temp(char) temp、およびさまざまな解決策をグーグルで検索していくつかの方法を試しましたが、これまでのところ運がありません。正直なところ、 const void *がどの型なのかさえわかりません。「Hello World」などの文字列を 2 番目の引数に直接渡すと、文句を言うのをやめることがわかっています。

4

2 に答える 2

2

2 番目のパラメーターwriteは、メモリ内のある場所へのポインターであり、3 番目のパラメーターは、ファイルに書き込むメモリ内のその場所からのバイト数です。したがって、コードは次のようになります。

double temp = 6.5;
write(fd[1], &temp, sizeof(temp));

ただし、これがまさにあなたが望むものかどうかはわかりません。明確にするために、これはあなたのバイナリ表現をdoubleファイルに書き込みます。ほとんどのプラットフォームでは、次の一連のバイトになります (ここでは 16 進数で表されます)。

00 00 00 00 00 00 26 64

これがテキスト ファイルであると思われる場合は、最初に数値を文字列に変換する必要があります。

double temp = 6.5;
char buffer[20];
sprintf(buffer, "%g", temp);
write(fd[1], buffer, strlen(buffer));

これにより、ファイルに「6.5」が書き込まれます。

于 2012-09-19T02:40:51.610 に答える
1

バイナリデータをファイルに書き込んでもかまわない場合は、試してください

write(fd[1], &temp, sizeof(temp));

実際に値をテキスト ファイルに書き込みたい場合は、最初に文字列に変換する必要があります。その場合は、次の行に沿って何かを試すことができます。

#define BUFF_SIZE 100

double temp = 17.5;
char* str[BUFF_SIZE];

sprintf(str, "%lf", temp);

write(fd[1], str, strlen(str));
于 2012-09-19T02:37:38.073 に答える