select --- در انتظار تکمیل ورودی/خروجی


این ماژول دسترسی به توابع select() و poll() موجود در بیشتر سیستم‌عامل‌ها، devpoll() موجود در Solaris و مشتقات آن، epoll() موجود در Linux 2.5+ و kqueue() موجود در بیشتر سیستم‌های BSD را فراهم می‌کند. توجه داشته باشید که در Windows، فقط برای سوکت‌ها کار می‌کند؛ در سایر سیستم‌عامل‌ها، برای انواع دیگر پرونده نیز کار می‌کند (به‌ویژه در Unix، روی پایپ‌ها کار می‌کند). نمی‌توان از آن برای پرونده‌های معمولی استفاده کرد تا تعیین شود که آیا یک پرونده از آخرین باری که خوانده شده است بزرگ‌تر شده است یا خیر.

توجه

ماژول selectors امکان تسهیم I/O سطح بالا و کارآمد را فراهم می‌کند و بر پایه عناصر اولیه ماژول select ساخته شده است. به کاربران توصیه می‌شود به‌جای آن از ماژول selectors استفاده کنند، مگر اینکه بخواهند کنترل دقیقی بر عناصر اولیه مورد استفاده در سطح سیستم‌عامل داشته باشند.

دسترس‌پذیری: not WASI.

این ماژول روی WebAssembly کار نمی‌کند یا در دسترس نیست. برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.

این ماژول موارد زیر را تعریف می‌کند:

exception select.error

نام مستعار منسوخ OSError.

تغییر یافته در نسخه‌ی 3.3: پیرو PEP 3151، این کلاس نام مستعار OSError شد.

select.devpoll()

یک شیء پایش (polling) برای /dev/poll برمی‌گرداند؛ برای متدهای پشتیبانی‌شده توسط اشیای devpoll، بخش اشیای پایش /dev/poll در زیر را ببینید.

اشیاء devpoll() به تعداد مجاز توصیف‌گرهای پرونده در زمان نمونه‌سازی وابسته‌اند. اگر برنامه شما این مقدار را کاهش دهد، devpoll() شکست خواهد خورد. اگر برنامه شما این مقدار را افزایش دهد، devpoll() ممکن است فهرست ناقصی از توصیف‌گرهای پرونده فعال را برگرداند.

توصیف‌گر پرونده جدید غیرقابل ارث‌بری است.

اضافه شده در نسخه‌ی 3.3.

تغییر یافته در نسخه‌ی 3.4: توصیف‌گر پرونده جدید اکنون غیرقابل‌ارث‌بری است.

select.epoll(sizehint=-1, flags=0)

یک شیء پایش لبه‌ای (edge polling) را برمی‌گرداند، که می‌توان از آن به‌عنوان رابط تحریک لبه‌ای (Edge Triggered) یا تحریک سطحی (Level Triggered) برای رویدادهای ورودی/خروجی استفاده کرد.

sizehint تعداد مورد انتظار رویدادهای ثبت‌شونده را به epoll اطلاع می‌دهد. این مقدار باید مثبت باشد، یا -1 باشد تا از مقدار پیش‌فرض استفاده شود. این مقدار فقط در سیستم‌های قدیمی‌تری استفاده می‌شود که epoll_create1() در آن‌ها در دسترس نیست؛ در غیر این صورت هیچ اثری ندارد (هرچند مقدار آن همچنان بررسی می‌شود).

flags منسوخ شده و به‌طور کامل نادیده گرفته می‌شود. با این حال، در صورتی که ارائه شود، مقدار آن باید 0 یا select.EPOLL_CLOEXEC باشد، در غیر این صورت OSError پرتاب می‌شود.

برای متدهای پشتیبانی‌شده توسط اشیای epolling، بخش اشیای پایش (polling) با محرک لبه و سطح (epoll) در زیر را ببینید.

اشیای epoll از پروتکل مدیریت زمینه پشتیبانی می‌کنند: هنگامی که در یک دستور with استفاده شوند، توصیف‌گر پرونده جدید به‌طور خودکار در پایان بلوک بسته می‌شود.

توصیف‌گر پرونده جدید غیرقابل ارث‌بری است.

تغییر یافته در نسخه‌ی 3.3: پارامتر flags افزوده شد.

تغییر یافته در نسخه‌ی 3.4: پشتیبانی از دستور with اضافه شد. توصیف‌گر پرونده جدید اکنون غیرقابل‌ارث‌بری است.

منسوخ شده از نسخه‌ی 3.4: پارامتر flags. اکنون از select.EPOLL_CLOEXEC به‌صورت پیش‌فرض استفاده می‌شود. برای اینکه توصیف‌گر پرونده قابل ارث‌بردن شود، از os.set_inheritable() استفاده کنید.

دسترس‌پذیری: Linux >= 2.5.44.

select.poll()

یک شیء پایش (polling object) برمی‌گرداند که از ثبت و لغو ثبت توصیف‌گرهای پرونده و سپس پایش آن‌ها برای رویدادهای ورودی/خروجی پشتیبانی می‌کند؛ برای متدهای پشتیبانی‌شده توسط اشیای پایش، بخش اشیای پایش (polling) در زیر را ببینید.

select.kqueue()

یک شیء صف هسته (kernel queue) برمی‌گرداند؛ برای متدهای پشتیبانی‌شده توسط اشیای kqueue، بخش اشیای Kqueue در زیر را ببینید.

توصیف‌گر پرونده جدید غیرقابل ارث‌بری است.

تغییر یافته در نسخه‌ی 3.4: توصیف‌گر پرونده جدید اکنون غیرقابل‌ارث‌بری است.

select.kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)

یک شیء رویداد هسته برمی‌گرداند؛ برای متدهای پشتیبانی‌شده توسط اشیای kevent، بخش اشیای Kevent در زیر را ببینید.

select.select(rlist, wlist, xlist, timeout=None)

این یک رابط ساده برای فراخوانی سیستمی select() در یونیکس است. سه آرگومان نخست، پیمایش‌پذیرهایی از «اشیاء انتظارپذیر (waitable objects)» هستند: یا اعداد صحیحی که توصیف‌گرهای پرونده را نشان می‌دهند، یا اشیایی با یک متد بدون پارامتر به نام fileno() که چنین عدد صحیحی را برمی‌گرداند:

  • rlist: تا آماده شدن برای خواندن منتظر بمانید

  • wlist: صبر کنید تا برای نوشتن آماده شود

  • xlist: منتظر یک «وضعیت استثنایی» باشید (برای آگاهی از اینکه سیستم شما چه چیزی را چنین وضعیتی می‌داند، به صفحه راهنما مراجعه کنید)

پیمایش‌پذیرهای خالی مجاز هستند، اما پذیرش ۳ پیمایش‌پذیر خالی به پلتفرم وابسته است. (شناخته شده است که روی Unix کار می‌کند، اما روی Windows کار نمی‌کند.) آرگومان اختیاری timeout، مهلت زمانی را به‌صورت عدد ممیز شناور بر حسب ثانیه مشخص می‌کند. هرگاه آرگومان timeout حذف شود یا None باشد، تابع مسدود می‌شود تا حداقل یک توصیف‌گر پرونده آماده شود. مقدار زمان توقف ۰، یک پایش (poll) را مشخص می‌کند و تابع هرگز مسدود نمی‌شود.

مقدار بازگشتی، یک سه‌تایی از فهرست‌هایی از اشیای آماده است: زیرمجموعه‌هایی از سه آرگومان نخست. هنگامی که مهلت زمانی بدون آماده شدن توصیف‌گر پرونده‌ای به پایان برسد، سه فهرست خالی برگردانده می‌شود.

از میان انواع قابل قبول شیء در پیمایش‌پذیرها می‌توان به اشیای پرونده پایتون (مثلاً sys.stdin، یا اشیای برگردانده‌شده توسط open() یا os.popen()) و اشیای سوکت برگردانده‌شده توسط socket.socket() اشاره کرد. همچنین می‌توانید خودتان یک کلاس پوششی <wrapper> تعریف کنید، به شرطی که متد fileno() مناسبی داشته باشد (که واقعاً یک توصیف‌گر پرونده را برمی‌گرداند، نه صرفاً یک عدد صحیح تصادفی).

توجه

اشیای پرونده در ویندوز قابل قبول نیستند، اما سوکت‌ها قابل قبول هستند. در ویندوز، تابع زیربنایی select() توسط کتابخانه WinSock ارائه می‌شود و توصیف‌گرهای پرونده‌ای را که از WinSock منشأ نگرفته‌اند، مدیریت نمی‌کند.

تغییر یافته در نسخه‌ی 3.5: این تابع اکنون هنگامی که یک سیگنال آن را قطع کند، به‌جای پرتاب InterruptedError، با یک مهلت زمانی بازمحاسبه‌شده دوباره اجرا می‌شود، مگر اینکه هندلر سیگنال استثنایی پرتاب کند (برای دلیل آن، PEP 475 را ببینید).

select.PIPE_BUF

حداقل تعداد بایت‌هایی که می‌توان بدون مسدود شدن در یک پایپ نوشت، هنگامی که پایپ توسط select()، poll() یا رابط دیگری در این ماژول به‌عنوان آماده برای نوشتن گزارش شده باشد. این موضوع به انواع دیگر اشیاء شبه‌پرونده مانند سوکت‌ها اعمال نمی‌شود.

POSIX تضمین می‌کند که این مقدار حداقل ۵۱۲ باشد.

اضافه شده در نسخه‌ی 3.2.

اشیای پایش /dev/poll

سولاریس و مشتقات آن دارای /dev/poll هستند. در حالی که select() از مرتبه‌ی O(بالاترین توصیف‌گر پرونده) و poll() از مرتبه‌ی O(تعداد توصیف‌گرهای پرونده) است، /dev/poll از مرتبه‌ی O(توصیف‌گرهای پرونده فعال) است.

رفتار /dev/poll بسیار نزدیک به شیء استاندارد poll() است.

devpoll.close()

توصیف‌گر پرونده شیء پایش (polling) را ببندید.

اضافه شده در نسخه‌ی 3.4.

devpoll.closed

True اگر شیء پایش (polling) بسته باشد.

اضافه شده در نسخه‌ی 3.4.

devpoll.fileno()

شماره توصیف‌گر پرونده شیء polling را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.4.

devpoll.register(fd[, eventmask])

یک توصیف‌گر پرونده را در شیء پایش (polling) ثبت کنید. فراخوانی‌های بعدی متد poll() سپس بررسی می‌کنند که آیا توصیف‌گر پرونده رویدادهای ورودی/خروجی در انتظار دارد یا خیر. fd می‌تواند یک عدد صحیح باشد، یا شیءای با متد fileno() که یک عدد صحیح بازمی‌گرداند. اشیای پرونده fileno() را پیاده‌سازی می‌کنند، بنابراین می‌توان از آن‌ها نیز به‌عنوان آرگومان استفاده کرد.

eventmask یک نقاب بیتی اختیاری است که نوع رویدادهایی را که می‌خواهید بررسی کنید توصیف می‌کند. ثابت‌ها همان ثابت‌های مورد استفاده در شیء poll() هستند. مقدار پیش‌فرض ترکیبی از ثابت‌های POLLIN، POLLPRI و POLLOUT است.

هشدار

ثبت یک توصیف‌گر پرونده که از پیش ثبت شده است، خطا نیست، اما نتیجه تعریف‌نشده است. اقدام مناسب این است که ابتدا آن را از ثبت خارج کنید یا تغییر دهید. این یک تفاوت مهم در مقایسه با poll() است.

devpoll.modify(fd[, eventmask])

این متد یک unregister() و به دنبال آن یک register() انجام می‌دهد. این کار (کمی) کارآمدتر از انجام همان کار به‌صورت صریح است.

devpoll.unregister(fd)

یک توصیف‌گر پرونده را که توسط یک شیء پایش (polling) پیگیری می‌شود، حذف کنید. دقیقاً مانند متد register()، fd می‌تواند یک عدد صحیح یا یک شیء با متد fileno() باشد که یک عدد صحیح برمی‌گرداند.

تلاش برای حذف توصیف‌گر پرونده‌ای که هرگز ثبت نشده است، به‌طور ایمن نادیده گرفته می‌شود.

devpoll.poll([timeout])

مجموعه‌ای از توصیف‌گرهای پرونده ثبت‌شده را پایش می‌کند و فهرستی را برمی‌گرداند که ممکن است خالی باشد و شامل دوتایی‌های (fd, event) برای توصیف‌گرهایی است که رویدادها یا خطاها برای گزارش دارند. fd توصیف‌گر پرونده است و event یک نقاب بیتی است که بیت‌های آن برای رویدادهای گزارش‌شده برای آن توصیف‌گر تنظیم شده‌اند --- POLLIN برای ورودی در انتظار، POLLOUT برای نشان دادن اینکه توصیف‌گر قابل نوشتن است، و غیره. فهرست خالی نشان می‌دهد که زمان فراخوانی به پایان رسیده و هیچ توصیف‌گر پرونده‌ای رویدادی برای گزارش نداشته است. اگر timeout داده شود، مدت زمانی را بر حسب میلی‌ثانیه مشخص می‌کند که سیستم پیش از بازگشت برای رویدادها منتظر خواهد ماند. اگر timeout حذف شود، -1 باشد یا None باشد، فراخوانی تا زمانی که رویدادی برای این شیء پایش وجود داشته باشد، مسدود خواهد شد.

تغییر یافته در نسخه‌ی 3.5: این تابع اکنون هنگامی که یک سیگنال آن را قطع کند، به‌جای پرتاب InterruptedError، با یک مهلت زمانی بازمحاسبه‌شده دوباره اجرا می‌شود، مگر اینکه هندلر سیگنال استثنایی پرتاب کند (برای دلیل آن، PEP 475 را ببینید).

اشیای پایش (polling) با محرک لبه و سطح (epoll)

https://linux.die.net/man/4/epoll

eventmask یک نقاب بیتی (bit mask) است که از ثابت‌های زیر استفاده می‌کند:

ثابت

معنی

EPOLLIN

برای خواندن در دسترس است.

EPOLLOUT

برای نوشتن در دسترس است.

EPOLLPRI

داده فوری برای خواندن.

EPOLLERR

وضعیت خطا در fd مرتبط رخ داد.

EPOLLHUP

قطع ارتباط (Hang up) برای fd مرتبط رخ داد.

EPOLLET

رفتار تحریک لبه‌ای (Edge Trigger) را تنظیم می‌کند؛ پیش‌فرض، رفتار تحریک سطحی (Level Trigger) است.

EPOLLONESHOT

رفتار یک‌بار اجرا (one-shot) را تنظیم می‌کند. پس از دریافت یک رویداد، fd به‌صورت داخلی غیرفعال می‌شود.

EPOLLEXCLUSIVE

فقط یک شیء epoll را هنگامی که fd مرتبط رویدادی دارد، بیدار می‌کند. حالت پیش‌فرض (اگر این پرچم تنظیم‌نشده باشد) این است که تمام اشیاء epoll که یک fd را پایش می‌کنند، بیدار شوند.

EPOLLRDHUP

همتا در سوکت جریانی (stream socket) اتصال را بست یا نیمه‌ی نوشتاری اتصال را خاموش کرد.

EPOLLRDNORM

معادل با EPOLLIN

EPOLLRDBAND

باند داده اولویت قابل خواندن است.

EPOLLWRNORM

معادل EPOLLOUT.

EPOLLWRBAND

ممکن است داده‌های اولویت‌دار نوشته شوند.

EPOLLMSG

نادیده گرفته می‌شود.

EPOLLWAKEUP

از متوقف شدن در حین انتظار برای رویداد جلوگیری می‌کند.

اضافه شده در نسخه‌ی 3.6: EPOLLEXCLUSIVE افزوده شد. این ثابت فقط توسط هسته لینوکس 4.5 یا نسخه‌های بعدی پشتیبانی می‌شود.

اضافه شده در نسخه‌ی 3.14: EPOLLWAKEUP اضافه شد. این مورد فقط در هسته لینوکس 3.5 یا نسخه‌های بعدی پشتیبانی می‌شود.

epoll.close()

توصیف‌گر پرونده کنترلی شیء epoll را ببندید.

epoll.closed

اگر شیء epoll بسته‌شده باشد، True است.

epoll.fileno()

شماره توصیف‌گر فایلِ fd کنترلی را برمی‌گرداند.

epoll.fromfd(fd)

ایجاد یک شیء epoll از یک توصیف‌گر پرونده داده‌شده.

epoll.register(fd[, eventmask])

یک توصیف‌گر پرونده fd را در شیء epoll ثبت کنید.

epoll.modify(fd, eventmask)

تغییر یک توصیف‌گر پرونده ثبت‌شده fd.

epoll.unregister(fd)

یک توصیف‌گر پرونده ثبت‌شده را از شیء epoll حذف کنید.

تغییر یافته در نسخه‌ی 3.9: این متد دیگر خطای EBADF را نادیده نمی‌گیرد.

epoll.poll(timeout=None, maxevents=-1)

منتظر رویدادها بمانید. timeout به ثانیه (float)

تغییر یافته در نسخه‌ی 3.5: این تابع اکنون هنگامی که یک سیگنال آن را قطع کند، به‌جای پرتاب InterruptedError، با یک مهلت زمانی بازمحاسبه‌شده دوباره اجرا می‌شود، مگر اینکه هندلر سیگنال استثنایی پرتاب کند (برای دلیل آن، PEP 475 را ببینید).

اشیای پایش (polling)

فراخوانی سیستمی poll()، که در اکثر سیستم‌های یونیکس پشتیبانی می‌شود، مقیاس‌پذیری بهتری را برای سرورهای شبکه‌ای فراهم می‌کند که به تعداد بسیار زیادی کلاینت به‌طور همزمان خدمات می‌دهند. poll() مقیاس‌پذیرتر است، زیرا این فراخوانی سیستمی فقط به فهرست کردن توصیف‌گرهای پرونده مورد نظر نیاز دارد، در حالی که select() یک بیت‌مپ می‌سازد، بیت‌های مربوط به توصیف‌گرهای پرونده مورد نظر را روشن می‌کند، و سپس بعد از آن، کل بیت‌مپ باید دوباره به‌صورت سطری پیمایش شود. select() O(بالاترین توصیف‌گر پرونده) است، در حالی که poll() O(تعداد توصیف‌گرهای پرونده) است.

poll.register(fd[, eventmask])

یک توصیف‌گر پرونده را در شیء پایش (polling) ثبت کنید. فراخوانی‌های بعدی متد poll() سپس بررسی می‌کنند که آیا توصیف‌گر پرونده رویدادهای ورودی/خروجی در انتظار دارد یا خیر. fd می‌تواند یک عدد صحیح باشد، یا شیءای با متد fileno() که یک عدد صحیح بازمی‌گرداند. اشیای پرونده fileno() را پیاده‌سازی می‌کنند، بنابراین می‌توان از آن‌ها نیز به‌عنوان آرگومان استفاده کرد.

eventmask یک نقاب بیتی اختیاری است که نوع رویدادهایی را که می‌خواهید بررسی کنید توصیف می‌کند، و می‌تواند ترکیبی از ثابت‌های POLLIN، POLLPRI و POLLOUT باشد که در جدول زیر توضیح داده شده‌اند. اگر مشخص نشود، مقدار پیش‌فرض استفاده‌شده هر ۳ نوع رویداد را بررسی می‌کند.

ثابت

معنی

POLLIN

داده‌ای برای خواندن وجود دارد.

POLLPRI

داده‌ای فوری برای خواندن وجود دارد.

POLLOUT

آماده برای خروجی: نوشتن مسدود نخواهد شد.

POLLERR

نوعی وضعیت خطا.

POLLHUP

قطع شد.

POLLRDHUP

همتای سوکت جریانی اتصال را بست، یا نیمه‌ی نوشتاری اتصال را خاموش کرد.

POLLNVAL

درخواست نامعتبر: توصیف‌گر باز نیست.

ثبت یک توصیف‌گر پرونده که پیش‌تر ثبت شده است، خطا نیست و همان اثری را دارد که توصیف‌گر دقیقاً یک بار ثبت شده باشد.

poll.modify(fd, eventmask)

یک توصیف‌گر پرونده (fd) از پیش ثبت‌شده را تغییر می‌دهد. این کار همان اثر register(fd, eventmask) را دارد. تلاش برای تغییر توصیف‌گر پرونده‌ای که هرگز ثبت‌نشده است، باعث پرتاب یک استثنای OSError با errno برابر ENOENT می‌شود.

poll.unregister(fd)

یک توصیف‌گر پرونده را که توسط یک شیء پایش (polling) پیگیری می‌شود، حذف کنید. دقیقاً مانند متد register()، fd می‌تواند یک عدد صحیح یا یک شیء با متد fileno() باشد که یک عدد صحیح برمی‌گرداند.

تلاش برای حذف توصیف‌گر پرونده‌ای که هرگز ثبت نشده است، باعث پرتاب استثنای KeyError می‌شود.

poll.poll([timeout])

از مجموعه توصیف‌گرهای پرونده ثبت‌شده پایش می‌کند و فهرستی را برمی‌گرداند که ممکن است خالی باشد و شامل ۲-تایی‌های (fd, event) برای توصیف‌گرهایی است که رویدادها یا خطاهایی برای گزارش دارند. fd توصیف‌گر پرونده است، و event یک نقاب بیتی است که بیت‌هایی در آن برای رویدادهای گزارش‌شده برای آن توصیف‌گر تنظیم شده‌اند --- POLLIN برای ورودی در انتظار، POLLOUT برای نشان دادن اینکه توصیف‌گر قابل نوشتن است، و غیره. یک فهرست خالی نشان می‌دهد که مهلت فراخوانی به پایان رسیده است و هیچ توصیف‌گر پرونده‌ای رویدادی برای گزارش نداشته است. اگر timeout داده شده باشد، مدت زمانی را بر حسب میلی‌ثانیه مشخص می‌کند که سیستم برای رویدادها پیش از بازگشت منتظر خواهد ماند. اگر timeout داده نشده باشد، منفی باشد، یا None باشد، فراخوانی تا زمانی که رویدادی برای این شیء پایش وجود داشته باشد، مسدود خواهد شد.

تغییر یافته در نسخه‌ی 3.5: این تابع اکنون هنگامی که یک سیگنال آن را قطع کند، به‌جای پرتاب InterruptedError، با یک مهلت زمانی بازمحاسبه‌شده دوباره اجرا می‌شود، مگر اینکه هندلر سیگنال استثنایی پرتاب کند (برای دلیل آن، PEP 475 را ببینید).

اشیای Kqueue

kqueue.close()

توصیف‌گر پرونده کنترلی شیء kqueue را ببندید.

kqueue.closed

اگر شیء kqueue بسته باشد، True است.

kqueue.fileno()

شماره توصیف‌گر فایلِ fd کنترلی را برمی‌گرداند.

kqueue.fromfd(fd)

یک شیء kqueue از یک توصیف‌گر پرونده‌ی داده‌شده ایجاد کنید.

kqueue.control(changelist, max_events[, timeout]) eventlist

رابط سطح پایین برای kevent

  • changelist باید یک پیمایش‌پذیر از شیءهای kevent باشد یا None

  • max_events باید ۰ یا یک عدد صحیح مثبت باشد

  • مهلت زمانی به ثانیه (امکان استفاده از مقادیر اعشاری وجود دارد)؛ پیش‌فرض None است، تا برای همیشه منتظر بماند

تغییر یافته در نسخه‌ی 3.5: این تابع اکنون هنگامی که یک سیگنال آن را قطع کند، به‌جای پرتاب InterruptedError، با یک مهلت زمانی بازمحاسبه‌شده دوباره اجرا می‌شود، مگر اینکه هندلر سیگنال استثنایی پرتاب کند (برای دلیل آن، PEP 475 را ببینید).

اشیای Kevent

https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2

kevent.ident

مقداری که برای شناسایی رویداد استفاده می‌شود. تفسیر آن به فیلتر بستگی دارد، اما این مقدار معمولاً توصیف‌گر پرونده است. در سازنده، ident می‌تواند یک int یا یک شیء با متد fileno() باشد. kevent عدد صحیح را به‌صورت داخلی ذخیره می‌کند.

kevent.filter

نام فیلتر هسته.

ثابت

معنی

KQ_FILTER_READ

یک توصیف‌گر می‌گیرد و هر زمان که داده‌ای برای خواندن موجود باشد، بازمی‌گردد.

KQ_FILTER_WRITE

یک توصیف‌گر می‌گیرد و هر زمان که داده‌ای برای نوشتن در دسترس باشد، برمی‌گردد.

KQ_FILTER_AIO

درخواست‌های AIO.

KQ_FILTER_VNODE

هنگامی که یک یا چند مورد از رویدادهای درخواستی پایش‌شده در fflag رخ دهد، برمی‌گردد.

KQ_FILTER_PROC

رویدادهای مربوط به یک شناسه فرایند را زیر نظر بگیرید.

KQ_FILTER_NETDEV

رویدادهای یک دستگاه شبکه را زیر نظر بگیرید (در macOS در دسترس نیست).

KQ_FILTER_SIGNAL

هر زمان که سیگنال تحت نظر به فرایند تحویل داده شود، بازگشت می‌کند.

KQ_FILTER_TIMER

یک زمان‌سنج دلخواه برقرار می‌کند.

kevent.flags

عملیات فیلتر.

ثابت

معنی

KQ_EV_ADD

یک رویداد را اضافه یا اصلاح می‌کند.

KQ_EV_DELETE

یک رویداد را از صف حذف می‌کند.

KQ_EV_ENABLE

به control() اجازه می‌دهد رویداد را برگرداند.

KQ_EV_DISABLE

رویداد را غیرفعال می‌کند.

KQ_EV_ONESHOT

رویداد را پس از اولین رخداد حذف می‌کند.

KQ_EV_CLEAR

پس از بازیابی یک رویداد، وضعیت را بازنشانی کنید.

KQ_EV_SYSFLAGS

رویداد داخلی.

KQ_EV_FLAG1

رویداد داخلی.

KQ_EV_EOF

شرط EOF مختص به فیلتر.

KQ_EV_ERROR

مقادیر بازگشتی را ببینید.

kevent.fflags

پرچم‌های مختص فیلتر.

پرچم‌های فیلتر برای KQ_FILTER_READ و KQ_FILTER_WRITE:

ثابت

معنی

KQ_NOTE_LOWAT

آستانه پایین بافر سوکت.

KQ_FILTER_VNODE پرچم‌های فیلتر:

ثابت

معنی

KQ_NOTE_DELETE

unlink() فراخوانی شد.

KQ_NOTE_WRITE

یک نوشتن رخ داد.

KQ_NOTE_EXTEND

پرونده توسعه یافت.

KQ_NOTE_ATTRIB

یک ویژگی تغییر کرد.

KQ_NOTE_LINK

تعداد پیوندها تغییر کرده است.

KQ_NOTE_RENAME

پرونده تغییر نام داده شد.

KQ_NOTE_REVOKE

دسترسی به پرونده لغو شد.

KQ_FILTER_PROC پرچم‌های فیلتر:

ثابت

معنی

KQ_NOTE_EXIT

فرایند خارج شده است.

KQ_NOTE_FORK

فرایند fork() را فراخوانی کرده است.

KQ_NOTE_EXEC

فرایند، یک فرایند جدید را اجرا کرده است.

KQ_NOTE_PCTRLMASK

پرچم فیلتر داخلی.

KQ_NOTE_PDATAMASK

پرچم فیلتر داخلی.

KQ_NOTE_TRACK

یک فرایند را در طول fork() پیگیری کنید.

KQ_NOTE_CHILD

برای NOTE_TRACK در فرایند فرزند بازگردانده می‌شود.

KQ_NOTE_TRACKERR

امکان اتصال به یک فرزند وجود ندارد.

پرچم‌های فیلتر KQ_FILTER_NETDEV (در macOS در دسترس نیست):

ثابت

معنی

KQ_NOTE_LINKUP

پیوند برقرار است.

KQ_NOTE_LINKDOWN

پیوند قطع است.

KQ_NOTE_LINKINV

وضعیت پیوند نامعتبر است.

kevent.data

داده‌های مخصوص فیلتر.

kevent.udata

مقدار تعریف‌شده توسط کاربر.