我正在使用命名管道来捕获另一个程序(Matlab)中的外部程序(wgrib2)的输出.Matlab代码如下所示,并system访问命令行以生成管道.这是我的问题:
myfifo使用后我是否必须关闭命名管道?代码运行后似乎仍然存在.myfifo需要关闭,关闭它的命令是什么?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)
Run Code Online (Sandbox Code Playgroud)
Jef*_*ouw 10
编辑反映下面的评论,这是正确的.删除!=关闭.
fclose(mFifo)
Run Code Online (Sandbox Code Playgroud)
如接受的答案所述,关闭不会删除fifo.您可能需要单独执行此操作.
您可能不应该在 MATLAB 中使用命名管道来捕获系统输出。根据MATLAB 的system()文档,您可以直接在调用中捕获输出system():
[status, cmdout] = system('wgrib2.exe multi_1.glo_30m.hs.201212.grb2 -ij 1 165 -ij 1 166');
a = cmdout
Run Code Online (Sandbox Code Playgroud)
但是,如果您坚持使用命名管道,那么是的,您应该关闭它。您应该始终关闭打开的资源。但关闭命名管道并不会删除 它。
| 归档时间: |
|
| 查看次数: |
14747 次 |
| 最近记录: |