当前位置: 代码迷 >> 驱动开发 >> sigio信号处理函数解决方案
  详细解决方案

sigio信号处理函数解决方案

热度:81   发布时间:2016-04-28 10:17:18.0
sigio信号处理函数
为什么SIGIO信号处理函数里面的printf函数在串口没有打印输出?

SIGIO信号处理函数确实是执行了,为了验证,特地在信号处理函数里面加了计数器,计数器是在不断增加,可串口看不到prinf打印信息,这是为什么呢?

#include <sys/types.h>   
#include <sys/stat.h>   
#include <fcntl.h>   
#include <stdio.h>   
#include <poll.h>   
#include <signal.h>   
#include <sys/types.h>   
#include <unistd.h>   
#include <fcntl.h>   
  
int fd;  

int vlaue = 0;
  
void my_signal_fun(int signum)//底层驱动发来信号后的信号处理函数  
{  
    vlaue++;
    printf("############# my_signal_fun ################");  
}  
  
int main(int argc, char **argv)  
{  
    unsigned char key_val;  
    int ret;  
    int Oflags;  
  
    signal(SIGIO, my_signal_fun);
      
    fd = open("/dev/higpio", O_RDWR);  
    if (fd < 0)  
    {  
        printf("can't open!\n");  
    }  
  
    fcntl(fd, F_SETOWN, getpid());
    Oflags = fcntl(fd, F_GETFL);
    fcntl(fd, F_SETFL, Oflags | FASYNC);
  
    while(1)
    {
        if(vlaue != 0)
        {
            printf("vlaue = %d\n", vlaue);
        }
        sleep(1);
    }
 
    return 0;  
}  

------解决方案--------------------
signal处理函数内不能用printf族的函数,你可以用创建文件的方式代替。
具体的解释可以在bash中man signal,有解释,还有signal里面支持哪些函数
http://man7.org/linux/man-pages/man7/signal.7.html
  相关解决方案