我是C的新人所以我有点困惑。这是我的代码:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
#define FILENAME "/var/note"
int main(int argc, char *argv[])
{
int userid = getuid();
int fd = open(FILENAME, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
write(fd, &userid, 4);
}
基本上我在文本文件中编写UID。但是,当我尝试实际打开笔记文件(用手)它给我的错误说:
您打开的文件中包含一些无效字符。如果继续编辑此文件,则可能会损坏此文档。 您也可以选择其他字符编码,然后重试。
我无法弄清楚为什么它会给我这个错误(当我实际上在这个文件中写了一些文字时)以及如何解决它。在我看来,问题在于字符编码,但我不知道使用哪一个。对不起,问题听起来很傻。谢谢。
答案 0 :(得分:1)
write(fd, &userid, 4);
您正在从userid
变量的开头开始写入4字节的数据,这是int
。
假设您的用户ID为42
,您的LSB位于右侧(按人类阅读顺序排列),您的体系结构位于Big endian。您的变量包含这4个字节:
0000 0000 0000 0000 0000 0000 0010 1010
您正在文件中写入这4个字节,这会产生以下字符:
NUL NUL NUL *
你的记事本警告你,因为文件中的NUL
不正常(提醒:这是为guid 42写的, YMMV )