我还没有找到在线使用 mkfifo()
功能的完整示例 . 我可以像这样制作fifo:
mkfifo("file",777)
但当我 fopen()
这个文件时,Octave只是挂起 . 从 mkfifo
对象创建,排队和出列字节的正确方法是什么?
我想在Octave中创建一个内存中的fifo(磁盘也很好),并从同一个Octave脚本中读取和写入 . 我的项目是实时运行的,所以我需要一个缓冲区,以便我可以填充和排出相同的Octave脚本 . 我搜索了一个没有结果的fifo库 . 即使只是创建一个矢量,推送和弹出也适合我的需要 . 我自己试过这个,但是我遇到了面向对象的编程设计问题,因为Octave不允许通过引用或指针传递 .
2 回答
有两个问题 . 首先:mkfifo期望模式为整数,基数为10,如果你写的是“777”,你认为是八进制,基数为8.第二:mkfifo使用umask将权限修改为(mode&〜umask)(参见man 3)
例如:
你可以看到modestr现在是prwxr - r--就像你期望的八进制744一样
现在你可以打开FIFO的一端:
当然这会阻塞,直到fifo的另一端连接起来 .
fifo类可以工作,但只能达到一定的大小 . 可以通过运行以下命令找到fifo的最大大小(以字节为单位):
下面是我为内存中的fifo编写的代码 . 它相当粗糙,但效果很好: