所以我试图对文件进行一些非常简单的读/写操作。因为它是一个赋值,所以我不能使用File*
来使用更复杂的函数。
我可以轻松创建一个文件并写入它但是如果我尝试回读我的内容(这是相同的内容,但我的问题归结为此)我没有得到我所期望的,我还没有看到这是为什么。
这是导致我出现问题的代码段:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char** argv){
int fdisk = open("testfile.txt", O_RDWR | O_CREAT | O_APPEND);
char buff [20] = "Just a short text!!!";
write(fdisk, buff, sizeof(buff));
char buff2[20];
read((fdisk), buff2, sizeof(buff2));
printf("Context of deleted file: %c\n",buff[1]);
printf("Context of deleted file: %c\n",buff2[1]);
return 0;
}
答案 0 :(得分:1)
创建文件时,需要指定文件访问模式:
int fdisk = open("testfile.txt", O_RDWR | O_CREAT | O_APPEND, 0666);
否则访问模式是一些不确定的值。
在阅读之前,你需要回顾它:
lseek(fdisk, 0, SEEK_SET); // rewind
答案 1 :(得分:1)
问题是write
调用使文件描述符在写入数据之后只指向(因此更多的写入将在此之后而不是覆盖相同的数据),因此跟随read
调用尝试在写完之后读取数据,并且可能什么都没有。
答案 2 :(得分:1)
我认为这是一系列问题:
这是一个最小的工作示例。这将在我的机器上编译并运行预期的结果。
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char** argv){
int fdisk = open("testfile.txt", O_RDWR | O_CREAT, 0666);
char buff[] = "Just a short text!!!";
write(fdisk, buff, sizeof(buff));
lseek(fdisk, 0, SEEK_SET);
char buff2[sizeof(buff)];
read((fdisk), buff2, sizeof(buff2));
printf("Context of deleted file: %s\n",buff);
printf("Context of deleted file: %s\n",buff2);
return 0;
}
作为最后一点,您正在使用的函数(读/写)都返回指示操作是否成功的值。你应该检查一下。他们会表示你的问题中的读操作实际上并没有读取任何数据(因为它位于文件的末尾)。