0

鉴于double temp = 6.5;我如何将它传递给 UNIX write()系统调用:

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

  1. fd[1]是一个文件描述符。
  2. 100是一个固定的缓冲区大小来处理大数值,以防万一。

我在中间放什么?我已经尝试了itoa&temp*temp(char) temp和其他一些方法,通过谷歌搜索不同的解决方案,但到目前为止没有运气。老实说,我什至不知道const void *是什么类型。我只知道如果我将诸如“Hello World”之类的字符串直接传递给第二个参数,它将停止抱怨。

4

2 回答 2

2

第二个参数 towrite是指向内存中某个位置的指针,第三个参数是要写入文件的内存中该位置的字节数。所以你的代码是:

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

不过,我不确定这是否正是您想要的。需要明确的是,这会将您的二进制表示写入double文件。在大多数平台上,这将是以下一系列字节(此处以十六进制表示):

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 回答