2015-05-28 133 views
2

我使用QFile打開一個Linux FIFO,它將每秒接收數據。爲什麼QFile(「A_FIFO_NAME」)調用字節總是返回0

fp = new QFile(DCB_DATA_INPUT); 

if(fp->open(QIODevice::ReadOnly| QIODevice::Text)) 
{ 
    log_d(1,TAG,"Open agiin success"); 

    s_notifier = new QSocketNotifier(fp->handle(), QSocketNotifier::Read, this); 
    s_notifier->setEnabled(true); 
    connect(s_notifier, SIGNAL(activated(int)), this, SLOT(notifier_process(int))); 
    return true; 

} 

notifier_process(int) { 
qint64 avai = fp->bytesAvailable(); 
log_d(1,TAG,QString("%1").arg(avai));...} 

回答

1

由於存在open bug report about this issue,我推薦使用標準的Linux API:

void notifier_process(int) 
{ 
    int bytesAvailable; 
    ioctl(fp->handle(), FIONREAD, &bytesAvailable); 

    char buffer[1024] = {0}; 
    read(fp->handle(),&buffer,bytesAvailable); 
    qDebug() << buffer; 
} 
+0

謝謝你,我差點忘了這張票,我也使用read()代替。 –

+0

@EliHuang如果這回答你的問題,請考慮標記它解決 –

相關問題