Что такое плохой файловый дескриптор в c?

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

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

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


person maryam    schedule 21.10.2010    source источник
comment
Добро пожаловать в SO. Вопрос не имеет ничего общего с C сам по себе, файловые дескрипторы - это функция ОС. Пожалуйста, измените заголовок и теги вашего вопроса соответственно.   -  person Jens Gustedt    schedule 21.10.2010


Ответы (1)


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

person schot    schedule 21.10.2010