0

我有这个代码片段:

struct stat *fileData;
if((fd=open("abc.txt",O_RDONLY)==-1)
      perror("file not opened");
if((fstat(fd,fileData)==-1)
      perror("stucture not filled");
printf("%d",fileData.st_size);

它向我显示错误:

 request for member ‘st_size’ in something not a structure or union

我也试过使用stat

4

2 回答 2

3

就目前而言,您正在将 ( fstatis) 写入一个未初始化的指针,然后尝试从中读取它,就好像它是一个struct stat. 您应该将代码更改为:

struct stat fileData;
if((fstat(fd, &fileData) == -1)
              ^

或者,您可以malloc记住fileData然后使用fileData->st_size. 这会不太优雅(你必须free等)。

于 2012-08-20T10:18:58.723 回答
0

你的fileData结构是一个指针。fileData.st_size必须是fileData->st.size(*fileDate).st_size

但是, stat() 期望您为 struct stat 提供存储,您必须这样做

struct stat fileData; // <---change to this
if((fd=open("abc.txt",O_RDONLY)==-1)
      perror("file not opened");
if((fstat(fd,&fileData)==-1)  // <---change to this
      perror("stucture not filled");
printf("%d",fileData.st_size);
于 2012-08-20T10:20:30.057 回答