Thực hành Hệ điều hành - Bài thực hành số 3: Lập trình pipe

  • Khi hai process được tạo, process cha đọc các lệnh trong file input, và truyền lệnh này sang process con. Process con nhận được lệnh này và thực thi nó.
  • Trước khi thực thi lệnh, process con chuyển hướng xuất của việc thực thi lệnh sang file output và chuyển hướng lỗi của việc thực thi lệnh sang file errror.
  • Trước khi xuất kết quả và lỗi vào file output và file error, process con ghi thông tin dòng lệnh vào hai file này.
  • Khi thực thi xong một lệnh, process con gửi thông báo sang process cha để yêu cầu process cha gửi sang lệnh tiếp theo.
doc 4 trang xuanthi 30/12/2022 840
Bạn đang xem tài liệu "Thực hành Hệ điều hành - Bài thực hành số 3: Lập trình pipe", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docthuc_hanh_he_dieu_hanh_bai_thuc_hanh_so_3_lap_trinh_pipe.doc

Nội dung text: Thực hành Hệ điều hành - Bài thực hành số 3: Lập trình pipe

  1. • Khi hai process được tạo, process cha đọc các lệnh trong file input, và truyền lệnh này sang process con. Process con nhận được lệnh này và thực thi nó. • Trước khi thực thi lệnh, process con chuyển hướng xuất của việc thực thi lệnh sang file output và chuyển hướng lỗi của việc thực thi lệnh sang file errror. • Trước khi xuất kết quả và lỗi vào file output và file error, process con ghi thông tin dòng lệnh vào hai file này. • Khi thực thi xong một lệnh, process con gửi thông báo sang process cha để yêu cầu process cha gửi sang lệnh tiếp theo. 1.5 Một số kỹ thuật lập trình 1.5.1 Xử lý thông số nhập vào từ chương trình Một chương trình tốt thường cho phép người dùng thiết lập một vài thông số khi chạy chương trình, chẳng hạn khi thực hiện lệnh: $ ls -R người dùng đã truyền vào thông số -R để liệt kê các file và thư mục không chỉ trong thư mục hiện hành mà còn cả những thư mục con của thư mục hiện hành nếu có. Sau đây là đoạn chương trình mẫu, sử dụng hàm getopt() để xử lý thông số -R ở trên: int opt; extern char *optarg; while ((opt = getopt(argc, argv, "R")) != EOF) { switch (opt) { case 'R': // Option -R occurs // Proccess that option here break; default: // Other options break; } } 1.5.2 Xử lý file cấu hình File cấu hình thường ở dạng text và có cấu trúc (đơn giản). Ta thường sử dụng các hàm sau để xử lý những dạng file này: • fopen: mở một file • fgets: đọc một dòng trong file • fclose: đóng file đã mở • open: mở một file • write: ghi một chuỗi các ký tự vào file • close: đóng file đã mở 1.5.3 Chuyển hướng xuất nhập file Khi một process được tạo trong hệ thống, mặc định process này được hệ thống cung cấp sẵn 3 file: stdin (0), stdout (1) và stderr (2) tương ứng với thiết bị nhập chuẩn (bản phím), thiết bị xuất chuẩn (monitor), và thiết bị
  2. • Giữa 2 kết quả của 2 dòng lệnh cách nhau bằng một dòng trống (không có khoảng trắng, dấu tab, ở dòng này) • Nếu một lệnh không xuất quả, vẫn phải ghi dòng chú thích và cách với các kết quả khác bởi một dòng trống. • Nếu lệnh phía trước làm thay đổi cấu trúc cây thư mục (mkdir, rm, rmdir, touch, ) thì kết quả của nó sẽ ảnh hưởng đến lệnh phía sau, nếu không (ls, pwd, cd, ) thì kết quả của nó không ảnh hưởng đến dòng lệnh phía sau. #command 0 // Dòng chú thích thông tin dòng lệnh // Dòng trống #command 1 // Lệnh 1 không tạo output #command 2 /home/ntnguyen/lab3/lab3 // Kết quả của lệnh 2 3.3 File error • Lỗi của một lệnh khi chạy sẽ được ghi vào file error. • Nội dung của chúng phải được ghi theo đúng thứ tự của các lệnh trong file input. • Trước mỗi thông tin lỗi có dòng chú thích ghi đây là lỗi của dòng lệnh nào trong file input (số thứ tự bắt đầu là 0) • Giữa 2 thông tin lỗi của 2 dòng lệnh cách nhau bằng một dòng trống (không có khoảng trắng, dấu tab, ở dòng này) • Nếu thực thi lệnh không có lỗi, vẫn phải ghi dòng chú thích và cách với các thông tin lỗi khác bởi một dòng trống. #command 0 // Thông tin dòng lệnh // Dòng trống #command 1 cd: 1: can't cd to /etca // Lỗi của lệnh 1 #command 2 // Lệnh 2 không có lỗi