objective-c - 访问命名管道以进行读写

标签 objective-c macos cocoa file-io nsfilehandle

我正在尝试创建一个简单的工具,可以创建、写入和读取命名管道。这是代码。

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        //create pipe
        system("rm /tmp/myPipe");
        system("mkfifo /tmp/myPipe");
        system("chmod 666 /tmp/myPipe");

        // write to pipe
        NSString *text = [NSString stringWithFormat:@"this is a test"];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if ([fileManager fileExistsAtPath:@"/tmp/myPipe" isDirectory:NO])
        {
            NSFileHandle *fileHandle=[NSFileHandle fileHandleForWritingAtPath:@"/tmp/myPipe"];
            [fileHandle seekToEndOfFile];
            [fileHandle writeData:[text dataUsingEncoding:NSUTF8StringEncoding]];
            [fileHandle closeFile];

        }
    }
    return 0;
}

文件已正确创建,权限为 prw-rw-rw- 1 xxx 轮 0 5 月 17 日 09:48 myPipe|

当我运行该工具时,它卡在以下行:

NSFileHandle *fileHandle=[NSFileHandle fileHandleForWritingAtPath:@"/tmp/myPipe"];

我在这里缺少什么?

最佳答案

除了我完全不了解代码的作用之外,这里没有任何问题。没有“挂起”,只是代码在管道中等待外部消息。

我只需要启动终端并输入

echo "foo" > /tmp/myPipe

感谢所有帮助过的人...

关于objective-c - 访问命名管道以进行读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44030859/

相关文章:

objective-c - 方法困惑的线程安全

linux - grep -xf 与预期输出不匹配,可能是一个错误

objective-c - NSUserDefaults,也是创造本地值(value)的好做法吗?

ios - 使用动画动态地将行添加到 TableView 的末尾

ios - UIButton 突然停止工作

macos - 以编程方式创建 Ad-Hoc 网络 OS X

macos - 我怎么能从我的主机 ping 我的 docker 容器

macos - 如何在Swift语言中改变NSView的圆角半径

objective-c - 防止用户在从远程 ftp 服务器 cocoa 传输文件时重命名文件

ios - 键盘是否有可能改变 iOS 应用程序的方向?