为什么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