Đại học Bách Khoa TP HCM, Khoa KH & KTMT Bài thực hành Mơn: Hệ điều hành Hồng Hồng Nam Email: hhnam@cse.hcmut.edu.vn Ngày 29 tháng 10 năm 2013 Một số nguyên tắc viết mã C Tham khảo: http://www.gnu.org/prep/standards/standards.html Một số nguyên tắc để viết chương trình C: • Số lượng ký tự (kể khoảng trắng) dịng code 79 • Giải thích mã nguồn: trường liệu cấu trúc, ý nghĩa hoạt động hàm, tham số đầu vào, thơng số đầu hàm • Định dạng mã nguồn thống toàn chương trình – Tên hằng: Viết hoa, ngắn gọn, hạn chế viết tắt Ví dụ: #define ERR_MISSED_FILE (-1) – Tên biến hay tên cấu trúc: Viết thường, không viết liền từ, đủ ý, ngắn gọn, thường danh từ Ví dụ: int num_people; – Tên hàm: tương tự tên biến, thường bắt đầu động từ Ví dụ: int search_name (List list, char * name); – Cách đặt dấu ngoặc nhọn, cách thụt đầu dòng: xem tham khảo CuuDuongThanCong.com https://fb.com/tailieudientucntt Lập trình C bản: Xử lý thơng số đầu vào chương trình Xử lý thông số đầu vào Xem lại thực hành số yêu cầu tập lớn số Ví dụ mô tả cách để xử lý thông số đầu vào #include #include int main ( int argc , char ∗∗ argv ) { int i = ; char ∗ f i l e n a m e = NULL; for ( i = ; i < a r g c ; i ++) { i f ( strcmp ( argv [ i ] , "−h" ) == ) p r i n t f ( " P r i n t ␣ h e l p ␣ \ n" ) ; e l s e i f ( strcmp ( argv [ i ] , "− i " ) == ) { i f ( i == a r g c − ) { 10 p r i n t f ( " E r r o r : ␣Need␣ one ␣ i n p u t ␣ f i l e \ n" ) ; 11 return −1; 12 } 13 f i l e n a m e = argv [ i + ] ; 14 i ++; 15 p r i n t f ( " Input ␣ f i l e ␣name␣ i s ␣%s \n" , f i l e n a m e ) ; 16 } 17 } 18 } Bên cạnh cách làm trên, sinh viên tham khảo thêm hàm getopt để phân tích thơng số đầu vào chương trình Xử lý input file Với file input đặc tả tập lớn số (giả lập định thời), viết đoạn chương trình để lấy thơng tin dịng input file 2 10 20 10 15 4 Gợi ý: Sử dụng hàm fscanf để phân tích dòng input file FILE∗ f ; int n1 , n2 , n3 , n4 ; char s [ ] ; f s c a n f ( f , "%d␣%d␣%d␣%d" , &n1 , &n2 , &n3 , &n4 ) ; Nếu sử dụng: fscanf(f, "%d %d %d %s", &n1, &n2, &n3, &s); kết trả nào? Để truy xuất tất dòng file đầu vào, sinh viên nên tham khảo man, lưu ý đọc hết file, hàm fscanf trả giá trị EOF (End Of File) CuuDuongThanCong.com https://fb.com/tailieudientucntt Sử dụng Makefile Makefile công cụ hỗ trợ việc biên dịch mã nguồn chương trình Bên cạnh việc sử dụng Makefile, dùng Bash script thực hành số Dùng Makefile Giả sử chương trình viết gồm file: prog.c prog.h Makefile có nội dung sau: a l l : prog prog : prog o g c c −o prog prog c prog o : prog c g c c −c prog c Lập trình Multi-process: tốn Producer-Consumer u cầu Dùng semaphore để giải tranh chấp tài nguyên buffer toán Producer-Consumer Tài nguyên buffer tài nguyên hữu hạn (bounded buffer) Xem lại slide giảng môn học, chương Hiện thực Có cách thực tốn trên: • Multi-thread: Tài ngun buffer khai báo q trình dùng chung với thread khác • Multi-process: Dùng lệnh fork để tạo trình Để tạo buffer, sinh viên cần tạo vùng nhớ chia sẻ (Shared memory System V - xem slide thực hành Sakai) Sinh viên cần thực hai cách Hỏi: Dùng message-queue có giải tốn khơng? Thơng số đầu vào Khi thực chương trình, sinh viên cần cho phép xác định số lượng Producer Consumer gọi thực thi chương trình, số lượng phần tử buffer Bài tập thêm BT1 Hiện thực toán Reader-Writer CuuDuongThanCong.com https://fb.com/tailieudientucntt ... nên tham khảo man, lưu ý đọc hết file, hàm fscanf trả giá trị EOF (End Of File) CuuDuongThanCong. com https://fb .com/ tailieudientucntt Sử dụng Makefile Makefile công cụ hỗ trợ việc biên dịch mã... chương trình, số lượng phần tử buffer Bài tập thêm BT1 Hiện thực toán Reader-Writer CuuDuongThanCong. com https://fb .com/ tailieudientucntt