POSIX写入(2)到Swift中的文件描述符失败,出现“Bad file descriptor”

时间:2016-02-23 15:35:06

标签: swift posix file-descriptor

我在Swift中编写代码来写入POSIX系统上的文件(它适用于Linux和OSX),并使用POSIX open(2)和write(2)系统调用。但是,我发现,在写入标准输出时,对打开的文件描述符执行此操作会产生“错误的文件描述符”错误;即写信给stdout时:

> 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库还不是一个选项)?感谢。

1 个答案:

答案 0 :(得分:3)

你必须通过O_WRONLY("仅限写作和#34;)或 O_RDWR("开放阅读和写作")标记为open(), 否则你不能写入文件描述符:

let fd = open("/tmp/testfile", O_WRONLY | O_CREAT, 0o644)
相关问题