亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? qfilesystemwatcher_kqueue.cpp

?? QT 開(kāi)發(fā)環(huán)境里面一個(gè)很重要的文件
?? CPP
字號(hào):
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qfilesystemwatcher.h"#include "qfilesystemwatcher_kqueue_p.h"#include <qdebug.h>#include <qfile.h>#include <qsocketnotifier.h>#include <qvarlengtharray.h>#include <sys/types.h>#include <sys/event.h>#include <sys/stat.h>#include <sys/time.h>#include <fcntl.h>#include <qplatformdefs.h>// #define KEVENT_DEBUG#ifdef KEVENT_DEBUG#  define DEBUG qDebug#else#  define DEBUG if(false)qDebug#endifQKqueueFileSystemWatcherEngine *QKqueueFileSystemWatcherEngine::create(){    int kqfd = kqueue();    if (kqfd == -1)        return 0;    return new QKqueueFileSystemWatcherEngine(kqfd);}QKqueueFileSystemWatcherEngine::QKqueueFileSystemWatcherEngine(int kqfd)    : kqfd(kqfd){    fcntl(kqfd, F_SETFD, FD_CLOEXEC);    if (pipe(kqpipe) == -1) {        perror("QKqueueFileSystemWatcherEngine: cannot create pipe");        kqpipe[0] = kqpipe[1] = -1;        return;    }    fcntl(kqpipe[0], F_SETFD, FD_CLOEXEC);    fcntl(kqpipe[1], F_SETFD, FD_CLOEXEC);    struct kevent kev;    EV_SET(&kev,           kqpipe[0],           EVFILT_READ,           EV_ADD | EV_ENABLE,           0,           0,           0);    if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) {        perror("QKqueueFileSystemWatcherEngine: cannot watch pipe, kevent returned");        return;    }}QKqueueFileSystemWatcherEngine::~QKqueueFileSystemWatcherEngine(){    stop();    wait();    close(kqfd);    close(kqpipe[0]);    close(kqpipe[1]);    foreach (int id, pathToID.values())        ::close(id < 0 ? -id : id);}QStringList QKqueueFileSystemWatcherEngine::addPaths(const QStringList &paths,                                                     QStringList *files,                                                     QStringList *directories){    QMutexLocker locker(&mutex);    QStringList p = paths;    QMutableListIterator<QString> it(p);    while (it.hasNext()) {        QString path = it.next();        int fd;#if defined(O_EVTONLY)        fd = ::open(QFile::encodeName(path), O_EVTONLY);#else        fd = ::open(QFile::encodeName(path), O_RDONLY);#endif        if (fd == -1) {            perror("QKqueueFileSystemWatcherEngine::addPaths: open");            continue;        }        struct stat st;        if (fstat(fd, &st) == -1) {            perror("QKqueueFileSystemWatcherEngine::addPaths: fstat");            ::close(fd);            continue;        }        int id = (S_ISDIR(st.st_mode)) ? -fd : fd;        if (id < 0) {            if (directories->contains(path)) {                ::close(fd);                continue;            }        } else {            if (files->contains(path)) {                ::close(fd);                continue;            }        }        struct kevent kev;        EV_SET(&kev,               fd,               EVFILT_VNODE,               EV_ADD | EV_ENABLE | EV_ONESHOT,               NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE,               0,               0);        if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) {            perror("QKqueueFileSystemWatcherEngine::addPaths: kevent");            ::close(fd);            continue;        }        it.remove();        if (id < 0) {            DEBUG() << "QKqueueFileSystemWatcherEngine: added directory path" << path;            directories->append(path);        } else {            DEBUG() << "QKqueueFileSystemWatcherEngine: added file path" << path;            files->append(path);        }        pathToID.insert(path, id);        idToPath.insert(id, path);    }    if (!isRunning())        start();    else        write(kqpipe[1], "@", 1);    return p;}QStringList QKqueueFileSystemWatcherEngine::removePaths(const QStringList &paths,                                                        QStringList *files,                                                        QStringList *directories){    QMutexLocker locker(&mutex);    QStringList p = paths;    QMutableListIterator<QString> it(p);    while (it.hasNext()) {        QString path = it.next();        int id = pathToID.take(path);        QString x = idToPath.take(id);        if (x.isEmpty() || x != path)            continue;        int fd = id < 0 ? -id : id;        struct kevent kev;        EV_SET(&kev,               fd,               EVFILT_VNODE,               EV_DELETE,               NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE,               0,               0);        if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) {            perror("QKqueueFileSystemWatcherEngine::removeWatch: kevent");        }        ::close(fd);        it.remove();        if (id < 0)            directories->removeAll(path);        else            files->removeAll(path);    }    if (pathToID.isEmpty()) {        stop();        locker.unlock();        wait();        locker.relock();    } else {        write(kqpipe[1], "@", 1);    }    return p;}void QKqueueFileSystemWatcherEngine::stop(){    write(kqpipe[1], "q", 1);}void QKqueueFileSystemWatcherEngine::run(){    static const struct timespec ZeroTimeout = { 0, 0 };    forever {        struct kevent kev;        DEBUG() << "QKqueueFileSystemWatcherEngine: waiting for kevents...";        int r = kevent(kqfd, 0, 0, &kev, 1, 0);        if (r < 0) {            perror("QKqueueFileSystemWatcherEngine: error during kevent wait");            return;        }        QMutexLocker locker(&mutex);        do {            int fd = kev.ident;            DEBUG() << "QKqueueFileSystemWatcherEngine: processing kevent" << kev.ident << kev.filter;            if (fd == kqpipe[0]) {                char c;                if (read(kqpipe[0], &c, 1) != 1) {                    perror("QKqueueFileSystemWatcherEngine: error reading from pipe");                    return;                }                switch (c) {                case 'q':                    DEBUG() << "QKqueueFileSystemWatcherEngine: thread received 'q', exiting...";                    return;                case '@':                    DEBUG() << "QKqueueFileSystemWatcherEngine: thread received '@', continuing...";                    break;                default:                    DEBUG() << "QKqueueFileSystemWatcherEngine: thread received unknow message" << c;                    break;                }            } else {                int id = fd;                QString path = idToPath.value(id);                if (path.isEmpty()) {                    // perhaps a directory?                    id = -id;                    path = idToPath.value(id);                    if (path.isEmpty()) {                        DEBUG() << "QKqueueFileSystemWatcherEngine: received a kevent for a file we're not watching";                        continue;                    }                }                if (kev.filter != EVFILT_VNODE) {                    DEBUG() << "QKqueueFileSystemWatcherEngine: received a kevent with the wrong filter";                    continue;                }                if ((kev.fflags & (NOTE_DELETE | NOTE_REVOKE | NOTE_RENAME)) != 0) {                    DEBUG() << path << "removed, removing watch also";                    pathToID.remove(path);                    idToPath.remove(id);                    ::close(fd);                    if (id < 0)                        emit directoryChanged(path, true);                    else                        emit fileChanged(path, true);                } else {                    DEBUG() << path << "changed, re-enabling watch";                    if (id < 0)                        emit directoryChanged(path, false);                    else                        emit fileChanged(path, false);                    // renable the watch                    EV_SET(&kev,                           fd,                           EVFILT_VNODE,                           EV_ADD | EV_ENABLE | EV_ONESHOT,                           NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE,                           0,                           0);                    if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) {                        perror("QKqueueFileSystemWatcherEngine::processKqueueEvents: kevent EV_ADD");                    }                }            }            // are there any more?            r = kevent(kqfd, 0, 0, &kev, 1, &ZeroTimeout);        } while (r > 0);    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产网站一区二区| 一区二区三区四区在线播放 | 国产欧美精品一区二区色综合| 色综合久久久久综合99| 久久激情综合网| 亚洲欧美一区二区三区久本道91| 日韩视频一区二区| 在线一区二区视频| 国产成人精品免费看| 日韩av网站免费在线| 自拍偷在线精品自拍偷无码专区 | 老司机免费视频一区二区三区| 亚洲精品视频在线| 欧美国产日韩a欧美在线观看| 日韩一区二区在线免费观看| 欧美熟乱第一页| 99精品欧美一区二区蜜桃免费 | 欧美性大战久久久久久久 | 91丝袜国产在线播放| 国产精品中文有码| 看片的网站亚洲| 天涯成人国产亚洲精品一区av| 日韩毛片一二三区| 国产精品久久久久久久裸模| 久久蜜桃av一区精品变态类天堂| 日韩一区和二区| 欧美美女bb生活片| 欧美日韩国产在线观看| 欧美午夜理伦三级在线观看| 欧美在线免费视屏| 91亚洲国产成人精品一区二三 | 亚洲成人激情av| 亚洲一区免费观看| 亚洲午夜羞羞片| 亚洲第一电影网| 午夜欧美2019年伦理 | 国产美女娇喘av呻吟久久| 日韩黄色在线观看| 日韩精品视频网| 视频一区中文字幕| 午夜av电影一区| 日韩黄色片在线观看| 日韩精品一二三区| 美女mm1313爽爽久久久蜜臀| 麻豆91精品视频| 国产毛片一区二区| 成人黄色在线网站| 91在线一区二区| 欧美性极品少妇| 欧美一级片免费看| 久久免费国产精品| 国产精品麻豆一区二区| 亚洲欧美日韩在线| 亚洲国产成人av好男人在线观看| 午夜精品久久久| 久久国产综合精品| 国产精品一二三四区| 成人短视频下载| 91福利视频在线| 欧美一区二区三区在线电影| 亚洲精品一区二区三区福利| 国产精品入口麻豆九色| 玉足女爽爽91| 视频一区中文字幕| 精品一区二区三区免费播放| www.av精品| 欧美巨大另类极品videosbest| 日韩欧美一区二区免费| 久久久久久久精| 一区二区三区在线免费| 美女爽到高潮91| 丁香天五香天堂综合| 欧美午夜一区二区| 精品少妇一区二区三区在线播放| 中文无字幕一区二区三区| 亚洲精品国久久99热| 日本免费在线视频不卡一不卡二| 国产剧情一区在线| 色婷婷亚洲精品| 精品国产免费视频| 综合电影一区二区三区 | 国产精品视频在线看| 亚洲成人激情社区| 国产99久久久国产精品潘金网站| 欧美综合色免费| 国产亚洲一二三区| 亚洲国产成人91porn| 床上的激情91.| 91精品婷婷国产综合久久竹菊| 国产女主播一区| 日韩精品午夜视频| 91在线无精精品入口| 精品欧美久久久| 亚洲午夜av在线| 成人国产电影网| 日韩欧美成人激情| 夜夜精品视频一区二区| 国产成人啪免费观看软件| 欧美日本一区二区三区| 亚洲婷婷在线视频| 国产麻豆一精品一av一免费| 欧美男同性恋视频网站| **网站欧美大片在线观看| 狠狠色丁香久久婷婷综| 欧美日韩国产精品成人| 亚洲天堂a在线| 国产成人免费9x9x人网站视频| 日韩一区二区免费视频| 亚洲午夜精品17c| 91麻豆.com| 国产精品久久久久久久久快鸭| 国产在线精品一区二区三区不卡| 欧美三级中文字| 亚洲精品视频自拍| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩一区二区三区免费看| 欧美国产乱子伦| 国产精品白丝av| 精品日韩一区二区| 日本不卡在线视频| 精品视频一区二区三区免费| 亚洲精品视频免费看| 不卡一区中文字幕| 国产精品久久久久久久久免费丝袜| 国产一区二区三区在线观看免费| 精品免费国产一区二区三区四区| 日韩成人精品在线观看| 欧美肥妇毛茸茸| 丝袜国产日韩另类美女| 欧美日韩国产系列| 亚洲一区二区四区蜜桃| 欧美三片在线视频观看| 亚洲成人先锋电影| 欧美另类高清zo欧美| 天天av天天翘天天综合网| 亚洲成年人网站在线观看| 亚洲欧美在线视频| 97精品超碰一区二区三区| 亚洲图片激情小说| 欧洲激情一区二区| 午夜精品久久久久| 欧美一二三区在线观看| 国内精品写真在线观看| 久久久久久一二三区| 国产成人免费高清| 综合在线观看色| 欧美视频在线一区二区三区| 日韩精品乱码免费| 日韩一区二区三区观看| 精品在线亚洲视频| 国产精品剧情在线亚洲| 91高清在线观看| 日韩不卡一二三区| 欧美精品一区二区三区很污很色的| 国产伦精品一区二区三区免费| 国产精品丝袜久久久久久app| 色综合天天视频在线观看| 亚洲大片一区二区三区| 日韩欧美专区在线| 国产激情91久久精品导航| 国产精品不卡一区| 欧美三级视频在线观看| 久久精品噜噜噜成人88aⅴ| 国产女主播视频一区二区| 日本大香伊一区二区三区| 水蜜桃久久夜色精品一区的特点| 欧美videofree性高清杂交| 国产成人日日夜夜| 亚洲午夜久久久久久久久久久| 欧美一区二区精美| 成人sese在线| 亚洲va在线va天堂| 国产日韩影视精品| 欧美日韩中文字幕精品| 国产精品一区免费在线观看| 有坂深雪av一区二区精品| 日韩三级伦理片妻子的秘密按摩| 成人看片黄a免费看在线| 午夜欧美2019年伦理| 国产午夜久久久久| 欧美日韩欧美一区二区| 国产一区二区三区电影在线观看 | 99久久精品国产精品久久| 天涯成人国产亚洲精品一区av| 国产日韩欧美精品综合| 欧美三级电影在线看| 懂色av中文一区二区三区| 午夜天堂影视香蕉久久| 国产精品色哟哟| 日韩欧美一区在线| 91免费在线看| 国产精品自拍在线| 午夜精品久久久久久久久| 国产精品视频一二| 日韩一级二级三级| 91片黄在线观看| 国产精品一二三| 奇米在线7777在线精品| 亚洲黄色av一区| 国产精品色在线观看|