fstat()返回0,文件大小为0,错误号为11

时间:2015-04-29 10:26:25

标签: c linux file-handling fstat

我在我的代码中尝试以下内容: -

{

   int y,n_bytes;

   struct stat temp_data;

   y = fstat(netdev->queue_fd[class_id],&temp_data);
   printf("Success - %d , size -> %lld , Error- %d \n",y,temp_data.st_size,errno);
   n_bytes = write(netdev->queue_fd[class_id],buffer->data,buffer->size);
   y = fstat(netdev->queue_fd[class_id],&temp_data);
   printf("After write Success - %d , size -> %lld , Error- %d and the value of n_bytes is - %d ",y,temp_data.st_size,errno,n_bytes);

}

我得到的输出是: -

Success - 0, size -> 0 , Error - 11 
After write Success - 0, size -> 0, Error - 11 and the value of n_bytes is - 1526 

大小为0,错误号为11的原因是什么? 有没有其他方法来获取文件的大小??

注意:此处Netdev->queue_fd[class_id]是文件描述符。 在不同的调用中,n_bytes的值在{41,1514,66,...}之间变化。 (总是大于0)

感谢

2 个答案:

答案 0 :(得分:2)

  1. 成功后errno的状态无关紧要。 errno的值仅在失败时修改。 fstat()返回零,因此errno的值无关紧要。

  2. write()返回什么?你没有检查,所以你不知道write()电话后文件应该更大。

答案 1 :(得分:0)

Netdev->queue_fd[class_id]

的文件描述符
  • 常规文件或
  • 任何sys / fs条目或
  • 字符/阻止/网络设备文件?

如果它不是常规文件,则在写入命令后其大小不会更新。

S_ISREG()

检查文件错误