Ссылка 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 here
printf("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, required
int 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 seconds
CFRunLoopRunInMode(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.
closeOnInvalidate
true
если должен закрыться новый CFFileDescriptorfd
когда это лишено законной силы, иначеfalse
.callout
CFFileDescriptorCallBack для нового 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 );
Параметры
f
CFFileDescriptor.
Возвращаемое значение
Собственный дескриптор файла для
f
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
Возвращает булево значение, указывающее, допустим ли собственный дескриптор файла для данного CFFileDescriptor.
Объявление
Swift
func CFFileDescriptorIsValid(_
f
: CFFileDescriptor!) -> BooleanObjective C
Boolean CFFileDescriptorIsValid ( CFFileDescriptorRef f );
Параметры
f
CFFileDescriptor.
Возвращаемое значение
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 );
Параметры
f
CFFileDescriptor.
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 );
Параметры
f
CFFileDescriptor.
Обсуждение
После того, как лишенный законной силы, объект 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 );
Параметры
f
CFFileDescriptor.
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 );
Параметры
f
CFFileDescriptor.
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
использовать текущее средство выделения по умолчанию.f
CFFileDescriptor.
order
Порядок на новый цикл выполнения (см.
CFRunLoopSourceCreate
).Возвращаемое значение
Новый runloop источник для
f
, илиNULL
если была проблема, создающая объект. Владение соблюдает Создать Правило.Обсуждение
Контекст для нового runloop (см.
CFRunLoopSourceCreate
) совпадает с контекстом, переданным в том, когда CFFileDescriptor создавался (см.CFFileDescriptorCreate
).Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.5 и позже.
-
Возвращает идентификатор типа для CFFileDescriptor непрозрачный тип.
Объявление
Swift
func CFFileDescriptorGetTypeID() -> CFTypeID
Objective C
CFTypeID CFFileDescriptorGetTypeID ( void );
Возвращаемое значение
Идентификатор типа для CFFileDescriptor непрозрачный тип.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.5 и позже.
-
Определяет тип для собственного дескриптора файла.
Объявление
Swift
typealias CFFileDescriptorNativeDescriptor = Int32
Objective 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 = CFFileDescriptor
Objective C
typedef struct __CFFileDescriptor * CFFileDescriptorRef;
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.5 и позже.