Что такое плохой файловый дескриптор в c? - PullRequest
1 голос
/ 21 октября 2010

Это мой код функции, который хочет прочитать файл:

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 => дескриптор файла

и я уверен, что дескриптор файла верен.

1 Ответ

4 голосов
/ 21 октября 2010

После первой итерации вы close(filed) (строка 22), в результате чего все дальнейшие чтения не будут выполнены. Переместите вызов close за пределы цикла, или даже лучше: позвольте вызывающему пользователю закрыть дескриптор файла, поскольку он его открыл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...