sigio只处理输入信号而不输出c ++

时间:2016-08-18 11:52:37

标签: c++ signals sigaction

我正在研究一种通过串口uart ttyS0发送信息的嵌入式系统。现在我想从同一个串口接收数据。所以我使用sigaction实现了一个信号处理程序。我想使用SIGIO信号,但问题是因为我发送的数据存在中断。 那么我可以在阻塞输出信号的方法中加一个条件吗?

struct sigaction act;
memset(&act,0, sizeof(act));
act.sa_handler = &sigio_Handler;
//act.sa_flags=0;
//act.sa_restorer=NULL;
fcntl(this->stream_ ,F_SETFL, FNDELAY|FASYNC); 
fcntl(this->stream_,F_SETOWN,getpid());
sigaction(SIGIO,&act,0);

void DataSender::sigio_Handler(int signo){
int fd;
std::cout << "helloworld1" << "\n";
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
std::cout << "helloworld2" << "\n";
    if(signo == SIGIO ){
         unsigned char rx_buffer[3];
         int  rx_length = read(fd, (void*) rx_buffer,3);
         std::string mode;
         mode+=rx_buffer[0];
         mode+=rx_buffer[1];

         std::cout << "helloworld3" << std::endl;
         std::cout << rx_buffer << std::endl;
         std::cout << mode << std::endl;
         std::cout << (int)rx_buffer[2] << std::endl;

         projectionMode = mode;
         if (rx_length  == -1 ){
         std::cout << "could not read"<< std::endl;
         }
         if (rx_buffer[2] == 1){
            std::cout << "could not read1"<< std::endl;
         }else if(rx_buffer[2] == 2){

         }else if(rx_buffer[2] == 3){

         }else if(rx_buffer[2] == 4){

         }
    }
}

0 个答案:

没有答案