1

私は自分のコードで次のことを試みています:-

{

   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 より大きい)

ありがとう

4

2 に答える 2

2
  1. errno成功後のステータスは関係ありません。の値はerrno、失敗した場合にのみ変更されます。 fstat()ゼロを返したので、errno の値は問題ではありません。

  2. 何をwrite()返しますか?write()チェックしていないため、呼び出し後にファイルが大きくなる必要があることがわかりません。

于 2015-04-29T10:34:16.780 に答える
0

Netdev->queue_fd[class_id]のファイル記述子です

  • 通常のファイルまたは
  • sys/fs エントリまたは
  • 文字/ブロック/ネットワーク デバイス ファイル?

通常のファイルでない場合、そのサイズは write コマンドの後に更新されません

ファイルの種類を確認するS_ISREG()

于 2015-04-29T11:18:27.957 に答える