我在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 *,因为我想写的文件结果是假的.
所以这是一个错误,对吗?
该write()函数需要一个void *缓冲区; 它写入任意二进制数据.如果您需要转换为字符串,请使用printf().
您没有显示声明userid,但该write()行应写为:
if (write(fd, &userid, sizeof(userid)) != sizeof(userid))
Run Code Online (Sandbox Code Playgroud)
这将检测短写入(不太可能是整数类型的问题)和其他问题,并且无论类型如何都能正常工作userid.因此,该系列的原始版本可能是错误的.否则,错误似乎在你的期望而不是代码本身.