This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

đổi tên tập tin đang mở

linux is paradise
Added by almost 3 years ago  »  Votes: 1/1

Chuyện gì sẽ xảy ra nếu ta đổi tên tập tin đã được mở cho các tiến trình khác ghi vào?

Xét ví dụ sau, viết bằng ngôn ngữ PHP

 1 <?php
 2 $fh = fopen("./test.log","w");
 3 $n = 0;
 4 while (true) {
 5   fwrite($fh, ".... n = $n\n");
 6   $n = $n + 1;
 7   sleep(2);
 8 }
 9 fclose($fh);
10 ?>

Để thi hành chương trình ở trên, bạn lưu mã nguồn dưới tập tin test_fd.php, rồi thi hành lệnh

1 $ php -f ./test_fd.php

Khi đó, chương trình sẽ mở tập tin test.log, xóa mọi nội dung đã có hoặc tạo ra tập tin hoàn toàn mới, để sẵn sàng ghi nội dung mới vào. Vòng lặp while sẽ thực hiện đều đặn ghi một dòng mới vào tập tin ở trên sau mỗi hai giây. Vòng lặp này không bao giờ kết thúc. (Do đó, khi chương trình đang chạy bạn phải nhấn ^C để dừng.)

Trong khi chương trình đang chạy, bạn mở một cửa sổ mới và thực hiện đổi tên tập tin test.log thành test.log.old

1 $ mv ./test.log ./test.log.old

Theo bạn, sau khi thực hiện lệnh trên, chương trình PHP đang chạy có báo lỗi và dừng lại vì không tồn tại tập tin test.log không? Nếu có dừng, thì tại sao? Nếu không, thì tại sao và khi đó chương trình sẽ lưu các dòng vào tập tin nào?

Cuối cùng, bạn có thể nêu một ứng dụng của vấn đề được bạn giải thích không?

Ghi chú: phiên bản Bourne/Bash http://freebox.vn/blogs/525


Comments