linux 使用“read”系统调用函数从文件描述符中检索数据会导致垃圾值

kuhbmx9i  于 2023-05-16  发布在  Linux
关注(0)|答案(1)|浏览(121)

我正在使用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”作为格式说明符,但仍然不起作用

41zrol4v

41zrol4v1#

正如@yeputons在评论中提到的,在读取数据之前,您需要重置文件句柄。例如,使用lseek
这段代码看起来像是一个练习,您正在练习使用系统调用。在这种情况下,你显然必须使用你正在学习使用的调用。否则,您可能应该使用fwrite/fread或C++流。
有关writefwrite之间的差异的信息,请参见问题What are the main differences between fwrite and write?

相关问题