文件描述符并在linux fifos上选择

时间:2014-11-02 14:25:51

标签: c++ c linux file

我有一个FILE * (see GetHandle() == FILE*)的类包装器..

我想为hasData实现功能提问:

bool File::hasData(int waitSecs) {
    fd_set set;
    struct timeval tv;
    FD_ZERO(&set);
    FD_SET(fileno( GetHandle() ), &set);
    tv.tv_sec = waitSecs;
    tv.tv_usec = 0;
    int res = select(fileno( GetHandle())+1, &set, NULL, NULL, &tv);
    return res > 0;
}

事实证明FILE *有它的内部缓冲区(duh),所以除非我读取所有数据,select将返回0直到我这样做,因此我找到了两个丑陋的方式,我可以查询FILE *句柄中的read ptr != write ptr,并且我可以用NULL作为缓冲区调用setbuf,这样就不会有任何内部缓冲,因此任何读取都会读取所请求的数量并选择将返回正数...

问题是..在给定FILE *和非托管读写的情况下,有更优雅的方法来实现这样的函数吗?

0 个答案:

没有答案