windows - Brug af QIODevice med anonyme rør

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil bruge en QIODevice for at kunne læse fra et unavngivet rør, hvis data er tilgængelig.
Jeg prøvede dette med QFile: [3]


m\_pFile\_Pipe = new QFile();
HANDLE hRead, hWrite;
connect(m\_pFile\_Pipe, SIGNAL(readyRead()), this, SLOT(OutputAvailable\_QFile()));

SECURITY\_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY\_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

CreatePipe(&hRead, &hWrite, &sa, 0);
auto fhRead = \_open\_osfhandle((intptr\_t)hRead, \_O\_RDONLY);
auto OpenResult = m\_pFile\_Pipe->open(fhRead, QIODevice::ReadOnly);


Det 'rå' rør fungerer selv, jeg kan læse data fra det.
Men readyRead () signaleres aldrig og under testning:


void TestPipe() {
    char acBuffer[128];
    DWORD NumBytesRead;

    auto NumBytes = m\_pFile\_Pipe->bytesAvailable();
    qDebug() << "NumBytes" << NumBytes;
    ReadFile(hRead, acBuffer, sizeof(acBuffer), &NumBytesRead, NULL);
    qDebug() << QString::fromUtf8(acBuffer);
    while (m\_pFile\_Pipe->canReadLine()) {
        auto out = m\_pFile\_Pipe->readLine(512);
        qDebug() << "Line: " << out;
    }
    auto out\_all = m\_pFile\_Pipe->readAll();
    qDebug() << "Raw: " << out\_all;
}


NumBytes var altid 0, canReadLine () returneres altid falsk, og readAll () returnerede ikke.
ReadFile () kunne læse de forventede data.


Er der en QOIDevice at bruge til anonyme rør?
Qt docs siger, at QLocalSocket skal bruges til navngivne rør, men jeg fandt ikke noget om anonyme rør. [4] [5]

Bedste reference