主题 : 江湖告急:linux下异步通知和system函数冲突啊 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
楼主  发表于: 2013-07-12 11:14

 江湖告急:linux下异步通知和system函数冲突啊

救急啊:
我现在使用了linux下的异步通知,即当底层设备就绪后主动通过信号通知应用程序,相当于模拟了硬件中断机制。

同时在应用层上我有个功能是要拷贝文件到U盘上,用到的是system("cp -r /mnt /udisk")

可是运行的时候,一旦执行system这句话,整个程序就死了,没反应了。

把异步通知注释掉掉不使用,或者注释掉system,就不会有死。

有没有哪位大侠遇到过这种问题,怎么解决啊?

我的异步通知部分的代码如下:
int main(int argc, char *argv[])
{
    int Oflags;

    rtc_fd = ::open("/dev/rtc", 0);
    if (rtc_fd < 0)
    {
        perror("open rtc failed.\n");
    }
    
   pwm_fd = ::open("/dev/pwm", 0);
    if (pwm_fd < 0) {
        perror("open pwm device failed.\n");
    }

    signal(SIGIO, sig_handler);
    fcntl(pwm_fd, F_SETOWN, getpid());
    Oflags = fcntl(pwm_fd, F_GETFL);
    fcntl(pwm_fd, F_SETFL, Oflags | FASYNC);


// set the frequency of timer as 1000Hz
    int ret = ::ioctl(pwm_fd, PWM_IOCTL_SET_FREQ, 1000);
    if(ret < 0) {
        perror("set the frequency of the pwm");
        exit(1);
    }

    File1.setFileName("/mnt/line1_file.txt");
    if (!File1.open(QIODevice::ReadWrite | QIODevice::Text))
        qDebug() << File1.errorString();

    QApplication a(argc, argv);
    mainWidget w;
    w.setWindowFlags(Qt::FramelessWindowHint);
    w.show();

    return a.exec();
}