如何使用write()函数编写非char *?

时间:2012-09-04 00:27:59

标签: c linux posix system-calls

可以使用write()函数编写非char *吗?我需要打印unsigned long,我不知道该怎么做。换句话说,在unsigned long参数中传递buf

1 个答案:

答案 0 :(得分:1)

通常优先使用标准的C函数,因为它们更便携。如果可以,并且您希望将其输出为文本,则应该查看fprintf而不是fwrite。前者将为您格式化,后者用于编写原始内存块。

例如:

int val = 42;
fprintf (fh, "%d", val); // should check return value.

将输出文本“42”。

如果你想要写出二进制表示,fwrite就是这样的意思:

int val = 42;
fwrite (&val, sizeof (val), 1, fh); // should check return value.

这将写出二进制表示,以便将字节00042写入文件(取决于内存布局是什么)当然,对于int变量 - 它可能会因实现而异。


如果您能够使用文件句柄而不是描述符,那么f*函数对您没有好处。可能有正当理由说明您希望使用较低级别。

因此,如果您拥有write的描述符,则需要先将变量格式化为字符串,例如:

char buff[100];
sprintf (buff, "%d", val);
write (fd, buff, strlen (buff)); // should check return value.

假设您想要它作为文本。如果你想把它作为二进制值,那就类似于我们用fwrite完成它的方式:

write (fd, &val, sizeof (val)); // should check return value.