1

これは、ファイルを読みたい関数の私のコードです:

int sendByByte(int filed,int sockfd,int filesize)
{
 int i=0;
 int sent=0;
 char buf[BUFSIZE];
 while(i<filesize)
 {
  printf("fd is : %d\n",filed);
  printf("i: %d\n",i);
  int byte_read=read(filed,buf,BUFSIZE);
  if(byte_read == -1)
  {
   printf("MOSHKEL dar read\n");
   return -1;
  }
  int byte_send=send(sockfd,buf,byte_read,0);
  if(byte_send==-1)
  {
   printf("MOSHKEL dar send\n");
   return -1;
  }
  close(filed);
  i+=byte_read;
  sent+=byte_read;
 }
 return sent;
}

問題は、i=0動作してファイルを読み取ったが、read()-1 を返す場合です。コードの問題は何ですか?

  • socketfd=> サーバーのソケット
  • filed=> ファイル記述子

ファイル記述子が有効であることを確認します。

4

1 に答える 1

4

最初の反復の後close(filed)(22行目)、それ以降のすべての読み取りが失敗します。呼び出しをループの外に移動するcloseか、さらに良い方法:呼び出し元がファイル記述子を開いたので、ファイル記述子を閉じさせます。

于 2010-10-21T06:42:06.593 に答える