Ссылка CFFileDescriptor
CFFileDescriptor обеспечивает непрозрачный тип для контроля дескрипторов файлов для чтения и действия записи через CFRunLoop.
Вы используете CFFileDescriptor для контроля дескрипторов файлов для чтения и действия записи через CFRunLoop с помощью обратных вызовов. Каждый перезванивает, один выстрел и должен быть повторно включен, если Вы хотите получить другой.
Можно повторно включить обратный вызов в самой функции обратного вызова, но необходимо полностью обслужить дескриптор файла прежде, чем сделать так. Например, если Вы создадите CFFileDescriptor для канала и получите обратный вызов, потому что существуют байты, которые будут считаны, тогда если Вы не считаете все байты, но тем не менее повторно включите CFFileDescriptor для действия чтения, то Вы будете призваны обратно снова сразу.
Можно контролировать kqueue дескрипторы файлов для действия чтения для обнаружения, когда событие, для которого фильтрует kqueue, имело место. Вы ответственны за понимание использования kevent () API и вставка и удаление фильтров от kqueue дескриптора файла сами.
Следующий пример берет процесс UNIX ID в качестве параметра, и наблюдает до 20 секунд и сообщает, завершается ли процесс в то время:
// cc test.c -framework CoreFoundation -O#include <CoreFoundation/CoreFoundation.h>#include <unistd.h>#include <sys/event.h>static void noteProcDeath(CFFileDescriptorRef fdref, CFOptionFlags callBackTypes, void *info) {struct kevent kev;int fd = CFFileDescriptorGetNativeDescriptor(fdref);kevent(fd, NULL, 0, &kev, 1, NULL);// take action on death of process hereprintf("process with pid '%u' died\n", (unsigned int)kev.ident);CFFileDescriptorInvalidate(fdref);CFRelease(fdref); // the CFFileDescriptorRef is no longer of any use in this example}// one argument, an integer pid to watch, requiredint main(int argc, char *argv[]) {if (argc < 2) exit(1);int fd = kqueue();struct kevent kev;EV_SET(&kev, atoi(argv[1]), EVFILT_PROC, EV_ADD|EV_ENABLE, NOTE_EXIT, 0, NULL);kevent(fd, &kev, 1, NULL, 0, NULL);CFFileDescriptorRef fdref = CFFileDescriptorCreate(kCFAllocatorDefault, fd, true, noteProcDeath, NULL);CFFileDescriptorEnableCallBacks(fdref, kCFFileDescriptorReadCallBack);CFRunLoopSourceRef source = CFFileDescriptorCreateRunLoopSource(kCFAllocatorDefault, fdref, 0);CFRunLoopAddSource(CFRunLoopGetMain(), source, kCFRunLoopDefaultMode);CFRelease(source);// run the run loop for 20 secondsCFRunLoopRunInMode(kCFRunLoopDefaultMode, 20.0, false);return 0;}
-
Создает новый CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorCreate(_allocator: CFAllocator!, _fd: CFFileDescriptorNativeDescriptor, _closeOnInvalidate: Boolean, _callout: CFFileDescriptorCallBack, _context: UnsafePointer<CFFileDescriptorContext>) -> CFFileDescriptor!Objective C
CFFileDescriptorRef CFFileDescriptorCreate ( CFAllocatorRef allocator, CFFileDescriptorNativeDescriptor fd, Boolean closeOnInvalidate, CFFileDescriptorCallBack callout, const CFFileDescriptorContext *context );Параметры
allocatorСредство выделения для использования для выделения памяти для нового объекта дескриптора файла. Передача
NULLилиkCFAllocatorDefaultиспользовать текущее средство выделения по умолчанию.fdДескриптор файла для нового CFFileDescriptor.
closeOnInvalidatetrueесли должен закрыться новый CFFileDescriptorfdкогда это лишено законной силы, иначеfalse.calloutCFFileDescriptorCallBack для нового CFFileDescriptor.
contextКонтекстная информация для нового CFFileDescriptor.
Возвращаемое значение
Новый CFFileDescriptor или
NULLесли была проблема, создающая объект. Владение соблюдает Создать Правило.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Возвращает собственный дескриптор файла для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorGetNativeDescriptor(_f: CFFileDescriptor!) -> CFFileDescriptorNativeDescriptorObjective C
CFFileDescriptorNativeDescriptor CFFileDescriptorGetNativeDescriptor ( CFFileDescriptorRef f );Параметры
fCFFileDescriptor.
Возвращаемое значение
Собственный дескриптор файла для
f.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
-
Возвращает булево значение, указывающее, допустим ли собственный дескриптор файла для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorIsValid(_f: CFFileDescriptor!) -> BooleanObjective C
Boolean CFFileDescriptorIsValid ( CFFileDescriptorRef f );Параметры
fCFFileDescriptor.
Возвращаемое значение
trueесли собственный дескриптор файла дляfдопустимо, иначеfalse.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
-
Получает контекст для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorGetContext(_f: CFFileDescriptor!, _context: UnsafeMutablePointer<CFFileDescriptorContext>)Objective C
void CFFileDescriptorGetContext ( CFFileDescriptorRef f, CFFileDescriptorContext *context );Параметры
fCFFileDescriptor.
contextПо возврату, содержит контекст, переданный
fвCFFileDescriptorCreate.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
-
Лишает законной силы объект CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorInvalidate(_f: CFFileDescriptor!)Objective C
void CFFileDescriptorInvalidate ( CFFileDescriptorRef f );Параметры
fCFFileDescriptor.
Обсуждение
После того, как лишенный законной силы, объект CFFileDescriptor больше не будет читаться из или писаться в на Базовом уровне Fundation.
Если Вы передали
trueдляcloseOnInvalidateпараметр, когда Вы вызвалиCFFileDescriptorCreate, эта функция также закрывает базовый дескриптор файла. Если Вы передалиfalse, необходимо закрыть дескриптор сами после лишения законной силы объекта CFFileDescriptor.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Включает обратные вызовы для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorEnableCallBacks(_f: CFFileDescriptor!, _callBackTypes: CFOptionFlags)Objective C
void CFFileDescriptorEnableCallBacks ( CFFileDescriptorRef f, CFOptionFlags callBackTypes );Параметры
fCFFileDescriptor.
callBackTypesБитовая маска, указывающая, какие обратные вызовы включить (см. Идентификаторы Обратного вызова для возможных компонентов).
Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
-
Отключает обратные вызовы для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorDisableCallBacks(_f: CFFileDescriptor!, _callBackTypes: CFOptionFlags)Objective C
void CFFileDescriptorDisableCallBacks ( CFFileDescriptorRef f, CFOptionFlags callBackTypes );Параметры
fCFFileDescriptor.
callBackTypesБитовая маска, указывающая, какие обратные вызовы отключить (см. Идентификаторы Обратного вызова для возможных компонентов).
Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
-
Создает новый runloop источник для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorCreateRunLoopSource(_allocator: CFAllocator!, _f: CFFileDescriptor!, _order: CFIndex) -> CFRunLoopSource!Objective C
CFRunLoopSourceRef CFFileDescriptorCreateRunLoopSource ( CFAllocatorRef allocator, CFFileDescriptorRef f, CFIndex order );Параметры
allocatorСредство выделения для использования для выделения памяти для новой сумки и ее хранения для значений. Передача
NULLилиkCFAllocatorDefaultиспользовать текущее средство выделения по умолчанию.fCFFileDescriptor.
orderПорядок на новый цикл выполнения (см.
CFRunLoopSourceCreate).Возвращаемое значение
Новый runloop источник для
f, илиNULLесли была проблема, создающая объект. Владение соблюдает Создать Правило.Обсуждение
Контекст для нового runloop (см.
CFRunLoopSourceCreate) совпадает с контекстом, переданным в том, когда CFFileDescriptor создавался (см.CFFileDescriptorCreate).Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Возвращает идентификатор типа для CFFileDescriptor непрозрачный тип.
Объявление
Swift
func CFFileDescriptorGetTypeID() -> CFTypeIDObjective C
CFTypeID CFFileDescriptorGetTypeID ( void );Возвращаемое значение
Идентификатор типа для CFFileDescriptor непрозрачный тип.
Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Определяет тип для собственного дескриптора файла.
Объявление
Swift
typealias CFFileDescriptorNativeDescriptor = Int32Objective C
typedef int CFFileDescriptorNativeDescriptor;Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Определяет структуру для обратного вызова для CFFileDescriptor.
Объявление
Swift
typealias CFFileDescriptorCallBack = CFunctionPointer<((CFFileDescriptor!, CFOptionFlags, UnsafeMutablePointer<Void>) -> Void)>Objective C
typedef void (*CFFileDescriptorCallBack) ( CFFileDescriptorRef f, CFOptionFlags callBackTypes, void *info );Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Определяет структуру для контекста CFFileDescriptor.
Объявление
Swift
struct CFFileDescriptorContext { var version: CFIndex var info: UnsafeMutablePointer<Void> var retain: CFunctionPointer<((UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>)> var release: CFunctionPointer<((UnsafeMutablePointer<Void>) -> Void)> var copyDescription: CFunctionPointer<((UnsafeMutablePointer<Void>) -> Unmanaged<CFString>!)> }Objective C
typedef struct { CFIndex version; void * info; void * (*retain)(void *info); void (*release)(void *info); CFStringRef (*copyDescription)(void *info); } CFFileDescriptorContext;Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
-
Ссылка на объект CFFileDescriptor.
Объявление
Swift
typealias CFFileDescriptorRef = CFFileDescriptorObjective C
typedef struct __CFFileDescriptor * CFFileDescriptorRef;Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.5 и позже.
