我正在尝试使用系统调用read()和write()。以下程序创建一个文件并将一些数据写入其中。这是代码..
int main()
{
int fd;
open("student",O_CREAT,(mode_t)0600);
fd=open("student",O_WRONLY);
char data[128]="Hi nikhil, How are u?";
write(fd,data,128);
}
执行上述程序后,我得到了一个名为student的文件,其大小为128字节。
int main()
{
int fd=open("student",O_WRONLY);
char data[128];
read(fd,data,128);
cout<<(char*)data<<endl;
}
但我得到的输出是垃圾字符......为什么会这样呢?
我写了一个小的读程序来读取文件中的数据。她是代码。
但输出
答案 0 :(得分:4)
请勿在{{1}}模式下打开的文件中read
!
帮自己一个忙,总是检查IO功能的返回值。
您还应始终O_WRONLY
文件描述符(已成功)close
。对于像这样的琐碎代码可能无关紧要,但是如果你养成忘记它的习惯,你最终会编写泄漏文件描述符的代码,这是件坏事。
答案 1 :(得分:2)
您没有检查read()
是否返回错误。你应该这样做,因为你问题中的代码可能就是这种情况。
由于您首先打开文件只写,因此在其上调用read()
将导致错误。您应该打开文件进行阅读:
char data[128];
int fd = open("student", O_RDONLY);
if (fd != -1) {
if (read(fd, data, sizeof(data)) != -1) {
// Process data...
}
close(fd);
}
答案 2 :(得分:0)
嗯,首先是你的数据不是128字节。你的数据是字符串:“嗨nikhil,你好吗?”,这是小于128字节的方式。但是你要从数组写入128个字节到文件中。初始字符串之后的所有内容都将是内存中的随机垃圾,因为char数组仅使用21个字节的数据进行初始化。所以下一个107字节是垃圾。