C中的read()错误



我写了一个玩具程序来学习C中的文件I/O,下面是我的代码的一部分,这个程序的输出是错误的-我不知道我的代码中出了什么问题。

int fd = open(path_to_file, O_RDWR | O_APPEND | O_CREAT, 0777);
int size = 100;
int offset = 0;
write(fd, &size, sizeof(int));
write(fd, &offset, sizeof(int));
lseek(fd, 0, SEEK_SET);   /* start reading from the beginning */
int *size = malloc(sizeof(int));
int *offset = malloc(sizeof(int));
read(fd, size, sizeof(int));
read(fd, offset, sizeof(int));
printf("size is %d, offset is %d n", *size, *offset);
free(size);
free(offset);

我得到的输出是:

大小为1953719668,偏移量为1684497779

这些数字是如此巨大,但它们应该分别是100和0。我不明白这是怎么发生的。有人能为理解这一点提供帮助吗?

Ingo拥有它的权利,如果文件已经存在,您可以附加到它…
1个int的Mallocing不是很有效,但这应该有效
我猜你复制并粘贴了你的代码,变量上的相同名称阻止了它的编译

工作示例,即使文件存在:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
  int fd = open("test.dat", O_RDWR | O_CREAT, 0777);
  int size = 100;
  int offset = 0;
  write(fd, &size, sizeof(int));
  write(fd, &offset, sizeof(int));
  lseek(fd, 0, SEEK_SET);   /* start reading from the beginning */
  int *result_size = malloc(sizeof(int));
  int *result_offset = malloc(sizeof(int));
  read(fd, result_size, sizeof(int));
  read(fd, result_offset, sizeof(int));
  printf("size is %d, offset is %d n", *result_size, *result_offset);
  free(result_size);
  free(result_offset);
}

相关内容

最新更新