我正在使用命名管道(fifo)在python和MATLAB之間進行通信。從管道讀取的MATLAB代碼是可用的,但如果沒有寫入FIFO,它將掛起。我寧願在沒有數據可用時正常超時。Matlab從FIFO讀取fopen超時
如果管道存在(在bash):
$ mkfifo pipe_read
,但沒有數據的MATLAB打開命令:
>> fid = fopen('pipe_read', 'r');
掛起,直到可用數據:
$ echo "test data" >> pipe_read
而不是永遠阻止我想fopen
返回指示錯誤的文件ID(即,如果沒有可用的數據,則與文件不存在時的-1一樣)。
有沒有類似於寫入和讀取串行儀器命令中提供的異步讀取的解決方案:http://www.mathworks.com/help/matlab/ref/readasync.html?
或可能fopen
可以嵌入到一個matlab定時器對象,使超時?
這已被問過,但沒有一個答案: Matlab read from named pipe (fifo)
我綁定重現在Windows上的行爲,是'fopen'已經凍結?我期望'fread'和類似的凍結。函數'readasync'與串口有關,除非你使用java,我不知道在matlab中讀取/寫入asynchron文件的可能性。 – Daniel 2014-08-30 15:09:13
@Daniel:謝謝,我正在使用Mac OSX。 'fopen'凍結,以至於我甚至沒有找到'fscanf'或'fread'。 – ljk07 2014-08-30 16:01:02