【发布时间】:2012-09-04 00:27:59
【问题描述】:
可以使用write() 函数编写非字符* 吗?我需要打印unsigned long,但我不知道该怎么做。也就是说,在buf 参数中传递一个unsigned long。
【问题讨论】:
标签: c linux posix system-calls
可以使用write() 函数编写非字符* 吗?我需要打印unsigned long,但我不知道该怎么做。也就是说,在buf 参数中传递一个unsigned long。
【问题讨论】:
标签: c linux posix system-calls
通常最好使用可用的标准 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.
这将写出二进制表示,以便将字节 0、0、0 和 42 写入文件(当然取决于 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.
【讨论】:
write(fd, (char *)&val, sizeof(int)); 不会产生预期的结果?和上面的fwrite一样,它不会也写二进制表示吗?