Я пишу код в Swift для записи в файл в системе POSIX (он предназначен для работы с Linux и OSX) и с использованием POSIX open (2) и запись (2) системных вызовов. Тем не менее, я обнаружил, что при записи на стандартный вывод работает, делая это для открытого дескриптора файла, дает ошибку «Bad file descriptor»; то есть, при записи в стандартный вывод:POSIX write (2) для дескриптора файла в Swift с ошибкой «Bad file descriptor»
> let bytes: [UInt8] = [ 65, 66, 67, 13, 10 ]
> write(STDOUT_FILENO, UnsafePointer(bytes), 5)
ABC
И при открытии файла:
> let fd = open("/tmp/testfile", O_CREAT, 0o644)
fd: CInt = 3
> write(fd, UnsafePointer(bytes), 5)
$R1: Int = -1
> print(String.fromCString(strerror(errno)))
Optional("Bad file descriptor")
Это происходит как на OSX (с импортом Darwin) и Linux (с импортом Glibc). В обоих случаях файл создается и остается в размере 0. Я делаю что-то неправильно или есть ошибка в Swift или Swift/C-интерфейсе, и если последнее, кто-нибудь знает обходное решение (которое будет работать на Linux, использование библиотек Cocoa/Foundation еще не является вариантом)? Благодарю.
Благодаря; это и сделал трюк. – acb
@acb: Добро пожаловать! (Обратите внимание, что вы можете * принять * ответ, если это помогло, чтобы отметить проблему как решение.) –