【发布时间】:2016-06-05 12:49:31
【问题描述】:
我正在用 Swift 编写代码以写入 POSIX 系统上的文件(它适用于 Linux 和 OSX),并使用 POSIX open(2) 和 write(2) 系统调用。但是,我发现,虽然写入标准输出有效,但对打开的文件描述符执行此操作会产生“错误文件描述符”错误;即,写入标准输出时:
> 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 库还不是一个选项)?谢谢。
【问题讨论】:
标签: swift posix file-descriptor