Я инициализирую forkpty так:
...
childpid = forkpty(&mfd,buf,NULL,NULL);
if(childpid==0){
 execve("/bin/sh","sh",NULL);
 sleep(1);
 exit(0);
}
...
Далее в коде таймера, мне необходимо считать с потока:
...
       FD_ZERO(&rfds); 
       FD_ZERO(&wfds);
       FD_SET(master_fd, &rfds);
...
do{
  err = select(master_fd+1,&rfds,&wfds,NULL,&tv);
 }while(err < 0&& errno==EINTR);
  if (FD_ISSET(master_fd, &rfds)){
  do{
     err=read(master_fd,buf,1024); // - здесь программа замерзает.
      // .. - а здесь - обработка буфера.
  }while(err<0 && errno==EINTR && FD_ISSET(master_fd,&wfds));
  } 
...
На строчке err=read(master_fd,buf,1024); программа замерзает, т.к. bash выдает меньше 1024 байта на чтение. Вопрос: как узнать, сколько байт поток подготовил на чтение, или например как "разморозить" read, когда входной поток пуст. Т.е. отключить блокирование процесса. Если файл открыт open'ом, то можно применить O_NDELAY. А как это сделать в случае с forkpty? Изменение атрибутов с помощью fcntl не дает результатов. :( Помогите пожалуйста.
    
      Ответ на:
      
          комментарий
        от SteelKey 
  
    
      Ответ на:
      
          комментарий
        от SteelKey 
  
    
      Ответ на:
      
          комментарий
        от grustnoe 
  
    
      Ответ на:
      
          комментарий
        от grustnoe 
  
    
      Ответ на:
      
          комментарий
        от SteelKey 
  
    
      Ответ на:
      
          комментарий
        от grustnoe 
  
    
      Ответ на:
      
          комментарий
        от SteelKey 
  
    
      Ответ на:
      
          комментарий
        от grustnoe 
  
    
      Ответ на:
      
          комментарий
        от SteelKey 
  
    
      Ответ на:
      
          комментарий
        от grustnoe 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум Помогите найти ошибку в следующем коде!!! (2004)
 - Форум select (2006)
 - Форум чтение fifo (2006)
 - Форум select, FD_ISSET, socket, тупняк (2010)
 - Форум сокет. получить данные (2007)
 
- Форум вопрос про select() (2013)
 - Форум помогите с select/pipe, плииииз... (2003)
 - Форум помогите с select/pipe, плииииз... (2003)
 - Форум select и non-blocking fifo (2007)
 - Форум [embedded] поллинг файлового дескриптора (2010)