2013-08-23 3 views
0

Я подключил модем к своему компьютеру (linux) через последовательный порт, и я пытаюсь писать и читать с модема с помощью системного вызова для записи и чтения. Во время чтения прочитайте системные блоки вызовов после читать все данные из модема, в моем коде я сделал чек на EOF, как показано нижеПрочитайте системный вызов, не обнаруживающий Конец файла

while(1) 
    { 
     if((rd_cnt =read(fd, &str, 1)) <=0) 
    { 
      perror("Read to dev failed"); 
      printf("error no=%d\n",errno); 
      break; 
    } 

     printf("char =%c -> hex=%x rd_cnt=%d\n",str,str,rd_cnt); 
     sleep(3); 
     str=0; 
}  

if(rd_cnt==0) 
    printf("EOF met\n"); 

, но я никогда не получил ВФ, я хотел прочитать все данные, отправить от модема до я встречаю конец файла. Прошу вас, пожалуйста.

+0

Где ваша 'while (1)' завершение цикла? – someone

+0

Как вы ожидаете, что последовательный порт узнает, когда закончится конец файла? Как правило, вы не хотите повесить серийное соединение после передачи файла, поэтому протоколы (например, почтенный ZMODEM) были разработаны для обработки передачи файлов, смешанной с обычным (интерактивным) трафиком. – unwind

+0

в следующем, если условие, если возвращаемое значение чтения равно <= 1, оно завершит – Sachin

ответ

2

изменить код, как этот

if((rd_cnt =read(fd, &str, sizeof(str))) <=0) 
    { 
      perror("Read to dev failed"); 
      printf("error no=%d\n",errno); 
      break; 
    } 

Это нормально, чтобы проверить состояние EOF.

Не нужно снова писать этот код, поскольку вы уже проверяете это.

//if(rd_cnt==0) 
    //printf("EOF met\n"); 
+0

Я дал это утверждение, чтобы проверить, получил ли чтение EOF или нет, дайте мне знать способ обнаружения EOF. – Sachin

+0

@Sachin ... Вы уже проверяете, что вы вызываете системный вызов 'read'. – someone

+0

Если EOF не отправлен, один пользователь никогда не сможет узнать, когда файл полностью прочитан .... одним из способов было бы использовать тайм-аут, возможно, в зависимости от скорости передачи в бодах, например – icbytes

Смежные вопросы