C,写系统调用,写int

Ald*_*ini 1 c low-level

我在Jon Erickson的书" 黑客:剥削的艺术"中找到了这个来源,

userid = getuid(); // get the real user ID
// Writing data
if(write(fd, &userid, 4) == -1)  // write user ID before note data
    fatal("in main() while writing userid to file");
write(fd, "\n", 1); // terminate line
Run Code Online (Sandbox Code Playgroud)

我试着编译这段代码,发现在我写的文件中,userid(这是我在上面的代码中编写的)是不对的; 他们只是写了一些奇怪的角色(我认为在这里写它并不重要).所以问题是我试图传递int给一个需要的函数char *,因为我想写的文件结果是假的.

所以这是一个错误,对吗?

Jon*_*ler 5

write()函数需要一个void *缓冲区; 它写入任意二进制数据.如果您需要转换为字符串,请使用printf().

您没有显示声明userid,但该write()行应写为:

if (write(fd, &userid, sizeof(userid)) != sizeof(userid))
Run Code Online (Sandbox Code Playgroud)

这将检测短写入(不太可能是整数类型的问题)和其他问题,并且无论类型如何都能正常工作userid.因此,该系列的原始版本可能是错误的.否则,错误似乎在你的期望而不是代码本身.