我正在使用Visual Studio进行Linux系统编程,并将其部署到VirtualBox VM。在这里,我创建了一个10个无符号长元素的数组,其值为i*i。然后,我将数组写入'sample.bin'文件。但是,在检索数组时,我得到的是垃圾值或零。
#include <cstdio>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
unsigned long elements[10];
for (int i = 0; i < 10; i++) {
elements[i] = (unsigned long)(i * i);
}
int fileHandle = open("sample.bin", O_CREAT | O_TRUNC | O_RDWR | O_APPEND, 0777);
int dataToFile = write(fileHandle, elements, 10 * sizeof(unsigned long));
unsigned long readBuffer[10];
int dataFromFile = read(fileHandle, readBuffer, 10 * sizeof(unsigned long));
for (int i = 0; i < 10; i++) {
printf("%d\t", readBuffer[i]);
}
return 0;
}
我尝试了以下方法:
1.我尝试修改'write'函数为write(fileHandle, &elements, 10 * sizeof(unsigned long));
,但它不工作。“读”功能也是如此。
1.我尝试将“%lu”作为格式说明符,但仍然不起作用
1条答案
按热度按时间41zrol4v1#
正如@yeputons在评论中提到的,在读取数据之前,您需要重置文件句柄。例如,使用
lseek
。这段代码看起来像是一个练习,您正在练习使用系统调用。在这种情况下,你显然必须使用你正在学习使用的调用。否则,您可能应该使用
fwrite
/fread
或C++流。有关
write
和fwrite
之间的差异的信息,请参见问题What are the main differences between fwrite and write?。