Tôi đang sử dụng một đường ống có tên để nắm bắt đầu ra của một chương trình bên ngoài (wgrib2) trong một chương trình khác (Matlab). Mã Matlab dưới đây và system
truy cập vào dòng lệnh để tạo đường ống. Dưới đây là câu hỏi của tôi:Nên đặt tên các đường ống được mở bằng mkfifo và cách nào?
- Tôi có phải đóng ống có tên
myfifo
sau khi tôi sử dụng không? Dường như nó tồn tại sau khi mã được chạy. - Nếu cần đóng
myfifo
, lệnh đóng là gì? - Tôi sẽ chạy mẫu mã dưới đây nhiều lần (> 1000), vì vậy có OK không nếu tôi sử dụng lại ống có tên và không đóng nó cho đến khi kết thúc?
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)
Câu trả lời này là sai. 1: Chương trình thực sự cần * cần * để đóng ống. Ngay cả các máy trạm có thể chạy ra khỏi các tập tin mở nếu chương trình xấu không đóng các tập tin của họ. 2: Bạn ** không ** đóng một đường ống có tên bằng cách xóa nó. Đóng và xóa là các hoạt động khác nhau. – willkil
Bạn đã chính xác. Tôi đã cập nhật câu trả lời cho hậu thế. –