matlab - 使用 mkfifo 打开的命名管道应该关闭吗?如何关闭?

标签 matlab shell command pipe named-pipes

我正在使用命名管道来捕获另一个程序 (MATLAB) 中的外部程序 (wgrib2) 的输出。 MATLAB 代码如下,system()访问命令行以制作管道:

system('mkfifo myfifo');     % Make a named pipe myfifo
% Call the external program wgrib2 and dump its output to the named pipe myfifo
system('wgrib2.exe multi_1.glo_30m.hs.201212.grb2 -ij 1 165 -ij 1 166 > myfifo &');
fid = fopen('myfifo', 'r');  % Open the named pipe
a = fscanf(fid, '%c');       % Read the output as character
fclose(fid);                 % Close the "file" (myfifo still exists afterward)
以下是我的问题:
  • 我是否必须关闭命名管道 myfifo在我使用它之后?代码运行后它似乎仍然存在。
  • myfifo需要关闭,关闭它的命令是什么?
  • 我将多次运行上面的代码示例(>1000 次),所以如果我重用命名管道并且直到最后才关闭它是否可以?
  • 最佳答案

  • 不。Unix 把所有东西都当成一个文件。命名管道没有什么不同。如果你用完了它,你可能想关闭它,这样你的机器就不会被命名管道弄得乱七八糟,但你不需要关闭它。

  • 编辑以反射(reflect)以下评论,这是正确的。删除 != 关闭。
  • 关闭命名管道的方式与关闭任何文件的方式相同:

  •     fclose(mFifo)
    

    如已接受的答案中所述,关闭不会删除先进先出。您可能需要单独执行此操作。
  • 重用命名管道并没有错。然而,由您决定何时完成对每次迭代的读/写。一旦从管道中读取了所有数据,您就可以随意多次使用它。
  • 关于matlab - 使用 mkfifo 打开的命名管道应该关闭吗?如何关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14648974/

    相关文章:

    hadoop fs –put 未知命令

    parsing - powershell从命令输出中获取内容

    file - 强制 dlmread 返回 uint8 矩阵 - 可能吗?

    c++ - 将 Fedora 23 上的 C/C++ 编译器降级为与 MATLAB R2016a 兼容的编译器

    MATLAB:将继承的属性设置为只读

    php - fgets 未在 ubuntu 12.04 上运行但在 windows 上运行良好(本地)

    shell - 检查文本文件中的两个变量

    linux - 如何在我的 shell 脚本中包含 html?执行 shell 脚本时可以得到 html 格式的输出吗?

    matlab - 什么时候可以传递函数句柄?

    bash - 向不同的终端发送不同的命令