Hoàng Hữu ĐứcLỜI MỞ ĐẦU Trong lập trình, Input/Output I/O của việc sao chép tệp tin và thư mục là quá trình truyền thông giữa các tệp tin và thư mục trong hệ thống tệp.. Quá trình I/O co
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT – HÀN
BÁO CÁO LẬP TRÌNH HỆ THỐNG INPUT/OUTPUT - WRITE A C PROGRAM TO DEMONSTRATE FILE AND
FOLDER COPPY
Sinh viên thực hiện: VÕ THANH TÂM - 21IT309
ĐỖ THIÊN THẮNG - 21IT378
LÊ VĂN THANH - 21IT172
LÊ THU THẢO - 21IT447
Giảng viên hướng dẫn : TS HOÀNG HỮU ĐỨC
Đà Nẵng, ngày 08 tháng 10 năm 2023
Trang 2GVHD: TS Hoàng Hữu Đức
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT – HÀN
BÁO CÁO LẬP TRÌNH HỆ THỐNG INPUT/OUTPUT - WRITE A C PROGRAM TO DEMONSTRATE FILE AND
FOLDER COPPY
Sinh viên thực hiện: VÕ THANH TÂM - 21IT309
ĐỖ THIÊN THẮNG -21IT378
LÊ VĂN THANH - 21IT172
LÊ THU THẢO - 21IT447
Giảng viên hướng dẫn : TS HOÀNG HỮU ĐỨC
Đà Nẵng, ngày 08 tháng 10 năm 2023
Trang 3GVHD: TS Hoàng Hữu Đức
LỜI MỞ ĐẦU
Trong lập trình, Input/Output (I/O) của việc sao chép tệp tin và thư mục là quá trình truyền thông giữa các tệp tin và thư mục trong hệ thống tệp Quá trình I/O copy bao gồm đọc dữ liệu từ nguồn (file hoặc folder gốc) và ghi dữ liệu vào đích (file hoặc folder đích)
Mục đích chính của thuật toán I/O được thiết kế để thực hiện quá trình truyền thông tin giữa các tệp tin và thư mục trong hệ thống tệp tin để tạo bản sao chính xác Điều này đảm bảo rằng nội dung của tệp tin hoặc thư mục được sao chép một cách toàn vẹn và chính xác, đảm bảo tính toàn vẹn dữ liệu trong quá trình sao chép
Cuối cùng, thông qua việc nghiên cứu và phân tích thuật toán I/O trong tệp tin và thư mục, nhóm em hy vọng đưa ra được cái nhìn tổng quan về quá trình sao chép tệp tin
và thư mục
LỜI CẢM ƠN
Trang 4GVHD: TS Hoàng Hữu Đức
Để thực hiện và hoàn thành tốt báo cáo này, chúng em đã nhận được sự giúp đỡ và hướng dẫn rất tận tình của các thầy cô thuộc Khoa Khoa học máy tính –trường đại học Công Nghệ Thông Tin và Truyền Thông Việt Hàn Em xin cảm ơn các thầy cô thuộc bộ môn chuyên ngành đã cung cấp cho chúng em các thông tin, kiến thức vô cùng quý báu
và cần thiết trong suốt thời gian qua để chúng em có thể thực hiện và hoàn thành báo cáo của mình Đặc biệt chúng em xin chân thành cảm ơn thầy Hoàng Hữu Đức, người đã trực tiếp hướng dẫn chúng em trong thời gian thực hiện báo cáo này
Cuối cùng, xin chân thành cảm ơn các bạn trong ngành công nghệ thông tin đã ủng hộ, giúp đỡ, chia sẻ kiến thức, kinh nghiệm và tài liệu có được giúp chúng tôi trong quá trình nghiên cứu và thực hiện báo cáo Do giới hạn về mặt thời gian và kiến thức cũng như kinh nghiệm nên báo cáo không tránh khỏi những sai xót Em rất mong nhận được sự thông cảm của quý thầy cô và mong đón nhận những góp ý của thầy cô và các bạn
Chúng em xin chân thành cảm ơn!
NHẬN XÉT CỦA GIẢNG VIÊN
Trang 5GVHD: TS Hoàng Hữu Đức
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Đ Nng, ngy 08 tháng 10 năm 2023
Giảng viên hướng dẫn
TS Hoàng Hữu Đức
MỤC LỤC
Trang 6GVHD: TS Hoàng Hữu Đức
LỜI MỞ ĐẦU 3
LỜI CẢM ƠN 4
NHẬN XÉT CỦA GIẢNG VIÊN 5
MỤC LỤC 6
CHƯƠNG 1 GIỚI THIỆU VỀ LẬP TRÌNH HỆ THỐNG 7
1.1 Giới thiệu về môn học 7
1.2 Giới thiệu về các kỹ thuật 7
CHƯƠNG 2 GIỚI THIỆU VỀ ĐỀ TÀI 9
2.1 Tổng quan về đề tài 9
2.2 Xây dựng thuật toán 9
2.2.1Thuật toán 9
2.2.2 Các thuật toán 10
CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH 11
3.1 Triển khai xây dựng chương trình 11
3.1.1 Giới thiệu về ngôn ngữ, thư viện đã sử dụng trong hệ thống 11
3.1.2 Mã nguồn của hệ thống 13
Trang 7GVHD: TS Hoàng Hữu Đức
CHƯƠNG 1 GIỚI THIỆU VỀ LẬP TRÌNH HỆ THỐNG
1.1 Giới thiệu về môn học
Môn học lập trình hệ thống là một phần quan trọng của chương trình học ngành công nghệ thông tin và liên quan chặt chẽ đến việc phát triển và quản lý các hệ thống phần mềm phức tạp
Lập trình hệ thống là công việc viết những phần mềm cho hệ thống ( máy tính) Điểm khác biệt chủ yếu của lập trình hệ thống đối với lập trình ứng dụng là lập trình ứng dụng nhằm viết những phần mềm phục vụ cho người dùng máy tính ( ví dụ: chương trình
xử lý văn bản), trong khi đó, lập trình hệ thống nhằm xây dựng những phần mềm phục vụ cho phần cứng (hệ thống) máy tính (ví dụ: chương trình chống phân mảnh đĩa cứng) Nó cũng đòi hỏi phải có những hiểu biết sâu hơn về phần cứng máy tính
Hệ thống ở đây có thể là một máy chủ, một mạng, một hệ thống nhúng hoặc một hệ thống phân tán lớn Lập trình hệ thống liên quan đến việc xây dựng và quản lý cả phần cứng và phần mềm của hệ thống này
Ngôn ngữ lập trình: Lập trình hệ thống thường được thực hiện bằng các ngôn ngữ lập trình như C, C++, Python Những ngôn ngữ này cung cấp sức mạnh và kiểm soát cao cho các lập trình viên khi họ xây dựng ứng dụng và dịch vụ hệ thống
Lập trình hệ thống đóng vai trò quan trọng trong việc đào tạo những chuyên gia trong lĩnh vực công nghệ thông tin, giúp họ có kiến thức và kỹ năng cần thiết để xây dựng, quản lý và bảo vệ các hệ thống máy tính phức tạp trong thế thới kỹ thuật ngày nay
1.2 Giới thiệu về các kỹ thuật
Môn lập trình hệ thống liên quan đến nhiều kỹ thuật và công cụ khác nhau để xây dựng, quản lý, và duy trì các hệ thống máy tính phức tạp
Kỹ thuật Quản lý Tài nguyên: Đây là việc quản lý các tài nguyên như bộ nhớ, CPU, ổ cứng và mạng trên hệ thống Sinh viên học cách cấp phát và giải phóng tài nguyên một cách hiệu quả để đảm bảo tính nhất quán và hiệu suất của hệ thống
Kỹ thuật Tiến trình và Luồng: Học cách tạo và quản lý các tiến trình và luồng làm việc trên hệ thống Điều này bao gồm việc sử dụng thư viện và API để đồng bộ hóa và tương tác giữa các tiến trình và luồng
Kỹ thuật Giao tiếp Mạng: Lập trình hệ thống thường liên quan đến giao tiếp qua mạng Sinh viên học cách sử dụng giao thức mạng như TCP/IP và UDP để tạo và quản lý kết nối mạng
Trang 8GVHD: TS Hoàng Hữu Đức
Kỹ thuật Lập trình hệ thống: Đây là khía cạnh cốt lõi của môn học, bao gồm việc viết mã để phát triển ứng dụng hệ thống Sinh viên học cách làm việc với ngôn ngữ lập trình như C, C++, và Python để xây dựng các ứng dụng hệ thống đáng tin cậy và hiệu quả
Kỹ thuật Hệ điều hành: Học về cách làm việc với hệ điều hành và sử dụng các API hệ thống để quản lý tệp tin, tiến trình và tài nguyên hệ thống
Kỹ thuật Bảo mật Hệ thống: Quản lý an ninh hệ thống là một phần quan trọng của lập trình hệ thống Sinh viên học cách bảo vệ hệ thống khỏi các mối đe dọa và tấn công mạng bằng cách triển khai các biện pháp bảo mật như xác thực, ủy quyền và mã hóa dữ liệu
Kỹ thuật Hiệu suất và Tối ưu hóa: Sinh viên học cách tối ưu hóa mã nguồn và cấu hình hệ thống để đảm bảo hiệu suất tốt nhất Điều này liên quan đến sử dụng công cụ hiệu suất và phân tích chức năng của hệ thống
Kỹ thuật Gỡ lỗi và Sửa lỗi (Debugging and Error Handling): Học cách xử lý lỗi và gỡ lỗi trong các ứng dụng và hệ thống để đảm bảo tính ổn định và tin cậy của chúng
Các kỹ thuật này cung cấp nền tảng cho việc phát triển và quản lý các hệ thống máy tính phức tạp, và chúng rất quan trọng trong lĩnh vực lập trình hệ thống, làm cơ sở cho việc phát triển và duy trì các hệ thống máy tính phức tạp và yêu cầu kiến thức chuyên sâu
và kỹ năng thực hành
Trang 9GVHD: TS Hoàng Hữu Đức
CHƯƠNG 2 GIỚI THIỆU VỀ ĐỀ TÀI 2.1 Tổng quan về đề tài
Thuật toán I/O (Input/Output) là một loại thuật toán trong lĩnh vực khoa học máy tính và
hệ thống máy tính, tập trung vào việc xử lý dữ liệu đầu vào và đầu ra Đề tài này tập trung vào việc sao chép tệp tin và thư mục trong hệ thống, đóng vai trò quan trọng trong việc tối ưu hóa hiệu suất của hệ thống
Vậy nên thuật toán I/O được dùng để sao chép tệp tin và thư mục là một hoạt động quan trọng trong hệ thống máy tính Khi sao chép, các tệp tin và thư mục được nhân bản từ một vị trí nguồn sang một vị trí đích khác trên cùng hoặc khác hệ thống lưu trữ Việc sao chép có nhiều ứng dụng và mục đích Một trong những ứng dụng phổ biến nhất
là sao lưu dữ liệu Bằng cách sao chép các tệp tin và thư mục quan trọng, ta tạo ra một bản sao dự phòng để đảm bảo an toàn dữ liệu Trong trường hợp dữ liệu bị mất, hỏng hoặc bị xóa một cách không đáng ý, ta có thể khôi phục lại từ bản sao đã sao chép Ngoài ra, sao chép cũng được sử dụng để chia sẻ dữ liệu giữa các người dùng và thiết bị khác nhau Bằng cách sao chép tệp tin và thư mục, ta có thể truyền gửi dữ liệu từ một hệ thống máy tính sang hệ thống khác, hoặc chia sẻ dữ liệu với người dùng khác trên cùng một hệ thống
Sao chép cũng hữu ích trong việc di chuyển dữ liệu Khi muốn di chuyển một tệp tin hoặc thư mục từ vị trí hiện tại sang vị trí mới, bạn có thể sao chép nó và sau đó xóa bản gốc Điều này giúp đảm bảo rằng dữ liệu không bị mất và đặt đúng vị trí mới mà bạn mong muốn
Trên thực tế, việc sao chép tệp tin và thư mục là một phần quan trọng trong quản lý dữ liệu và tổ chức thông tin trên hệ thống máy tính Nó cung cấp khả năng đảm bảo an toàn
dữ liệu, chia sẻ dữ liệu và di chuyển dữ liệu một cách dễ dàng và tiện lợi
2.2 Xây dựng thuật toán
2.2.1Thuật toán
Thuật toán I/O là một quy trình quản lý hoạt động đầu vào/đầu ra trong hệ thống máy tính Nó có nhiệm vụ điều phối và tối ưu hóa việc truyền dữ liệu giữa các thiết bị lưu trữ như ổ cứng, bộ nhớ đệm và các thiết bị ngoại vi
Trang 10GVHD: TS Hoàng Hữu Đức
Khi một yêu cầu I/O được tạo ra, thuật toán I/O sẽ đảm bảo rằng dữ liệu được truyền đi
và nhận về một cách hiệu quả và đúng đắn Nó có thể sử dụng các kỹ thuật như định thời,
ưu tiên, đoạn chia nhỏ dữ liệu, hoặc các thuật toán lập lịch để quản lý hoạt động I/O và đảm bảo tính toàn vẹn dữ liệu
Mục tiêu của thuật toán I/O là tối ưu hóa hiệu suất I/O bằng cách giảm thời gian truyền
dữ liệu, tối đa hóa băng thông sử dụng và đảm bảo tính nhất quán của dữ liệu Điều này đòi hỏi sự cân nhắc và tối ưu hóa các yếu tố như thứ tự xử lý yêu cầu, định thời, ưu tiên
và phân chia tài nguyên I/O
2.2.2 Các thuật toán
2.2.2.1 Thuật toán sao chép tệp tin
Bước 1 :Mở tệp nguồn để đọc bằng cách sử dụng hàm fopen Nếu việc mở tệp không thành công, chương trình in ra thông báo “không thể mở tệp nguồn” và thoát khỏi chương trình với lỗi exit_failure
Bước 2 : Mở tệp tin đích để ghi bằng cách sử dụng hàm fopen Nếu việc mở tệp không thành công, chương trình in ra thông báo “ không thể tạo tệp đích” và thoát khỏi chương trình với lỗi exit_failure
Bước 3: Sử dụng một vòng lặp while và hàm fgetc để đọc từng kí tự từ tệp nguồn cho đến khi gặp kí tự kết thúc tệp
Bước 4:Sử dụng hàm fputc để ghi từng kí tự đã đọc được từ tệp nguồn vào tệp đích
Bước 5:Đóng tệp nguồn và tệp đích bằng cách sử dụng hàm fclose
Bước 6: In ra thông báo “sao chép tệp thành công”
2.2.2.2 Thuật toán sao chép thư mục
Bước 1 : Tạo một chuỗi lệnh sao chép thư mục bằng cách sử dụng hàm sprint Chuỗi này được tạo từ lệnh hệ thống cp –r, đường dẫn thư mục nguồn và đường dẫn thư mục đích
Bước 2 : Sử dụng hàm system để thực thi lệnh sao chép thư mục Hàm này sẽ chạy chuỗi lệnh đã tạo ở bước trước và trả về giá trị 0 nếu lệnh được thực thi thành công
Bước 3 : Nếu giá trị trả về từ hàm system là 0, chương trình in ra thông báo “sao chép thư mục thành công” Ngược lại, in ra thông báo “Không thể sao chép thư mục”
Trang 11GVHD: TS Hoàng Hữu Đức
CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH 3.1 Triển khai xây dựng chương trình
3.1.1 Giới thiệu về ngôn ngữ, thư viện đã sử dụng trong hệ thống
a) Ngôn ngữ: C
Ngôn ngữ lập trình C là một ngôn ngữ máy tính mạnh mẽ và cổ điển đã được phát triển vào những năm 1970 tại Bell Labs bởi Dennis Ritchie Đây là một số điểm quan trọng về ngôn ngữ lập trình C:
Lịch sử và ảnh hưởng: C là ngôn ngữ lập trình cổ điển và đã ảnh hưởng sâu rộng đến nhiều ngôn ngữ lập trình khác như C++, C#, và Python Nó cũng đóng góp lớn vào việc phát triển hệ điều hành Unix
Cú pháp đơn giản: Có cú pháp đơn giản và dễ đọc, với các quy tắc cơ bản như dấu chấm phẩy (;) để kết thúc câu lệnh và dấu ngoặc nhọn ({}) để định nghĩa phạm vi
Hướng thủ tục: C là một ngôn ngữ hướng thủ tục, tức là mã nguồn được tổ chức thành các hàm hoặc thủ tục riêng lẻ Điều này giúp quản lý mã nguồn
dễ dàng và tái sử dụng code
Gần sát phần cứng: C cho phép truy cập trực tiếp vào bộ nhớ và phần cứng của máy tính, làm cho nó rất phù hợp cho việc phát triển các ứng dụng máy tính với hiệu năng cao và các ứng dụng nhúng
Đa nền tảng: Mã nguồn C có khả năng di động, có nghĩa là bạn có thể viết
mã trên một nền tảng và biên dịch nó trên nhiều hệ thống khác nhau mà không cần sửa đổi nhiều
Bộ dựng tạo mạnh mẽ: Có nhiều bộ dựng tạo mạnh mẽ như GCC (GNU Compiler Collection) cho phép biên dịch mã nguồn C trên nhiều nền tảng khác nhau
Cộng đồng lớn và tài liệu phong phú: Có một cộng đồng lập trình viên đông đảo và nhiều tài liệu học tập và hỗ trợ trực tuyến, giúp người mới học C dễ dàng tìm kiếm thông tin và giúp đỡ
Ngôn ngữ lập trình C vẫn được sử dụng rộng rãi trong các lĩnh vực như phát triển
hệ điều hành, phần mềm nhúng, viết ứng dụng có hiệu năng cao, và nhiều ứng dụng khác,
là một công cụ mạnh mẽ trong tay lập trình viên
b) Thư viện: stdio.h
Trong ngôn ngữ lập trình C, thư viện stdio.h được coi là một trong những thư viện quan trọng nhất Nó cung cấp các chức năng và tính năng để thực hiện các hoạt động
Trang 12GVHD: TS Hoàng Hữu Đức
nhập xuất dữ liệu từ và đến các thiết bị trong chương trình Điều này có nghĩa là thư viện stdio.h cho phép chúng ta đọc dữ liệu từ bàn phím hoặc tệp tin và ghi dữ liệu ra màn hình hoặc tệp tin
Thư viện stdio.h chứa một số hàm quan trọng như printf(), scanf(), fopen(), fclose(),
và nhiều hàm khác Đây là những hàm được sử dụng rộng rãi trong lập trình C để thực hiện các hoạt động nhập xuất chuẩn
Hàm printf(): Được sử dụng để hiển thị dữ liệu trên màn hình Nó cho phép bạn định dạng và in các giá trị của các biến hoặc ký tự chuỗi
Hàm scanf(): Được sử dụng để đọc dữ liệu từ bàn phím Bạn có thể sử dụng scanf() để đọc và gán giá trị cho các biến tương ứng với các định dạng được xác định rõ ràng
Hàm fopen(): Được sử dụng để mở một tệp tệp ở chế độ đọc hoặc ghi chỉ Hàm này trả về một con trỏ đến tệp tệp được mở, cho phép bạn thực hiện các hoạt động đọc và ghi trên tệp tệp
Hàm fclose(): Được sử dụng để đóng một tệp tin đã mở trước đó Điều này đảm bảo rằng tất cả dữ liệu được ghi vào tệp tệp và tài nguyên được giải nén một cách chính xác
Hàm fprintf(): Tương tự như printf(), nhưng được sử dụng để đưa dữ liệu vào một tệp tệp thay vì màn hình
Hàm fscanf(): Tương tự như scanf(), nhưng được sử dụng để đọc dữ liệu từ một tệp tệp thay vì từ bàn phím
Sử dụng thư viện stdio.h trong ngôn ngữ lập trình C mang lại nhiều lợi ích quan trọng Dưới đây là một số lợi ích chính khi sử dụng thư viện stdio.h:
Đầu vào và đầu ra chuẩn: stdio.h cung cấp các công cụ để làm việc với đầu vào và đầu ra chuẩn Bằng cách sử dụng các hàm như printf() và scanf(), bạn có thể dễ dàng nhập và xuất dữ liệu qua bàn phím và màn hình Điều này cho phép bạn tương tác với người dùng và hiển thị kết quả của chương trình một cách thuận tiện
Đọc và ghi tệp tệp: stdio.h cung cấp các hàm như fopen(), fclose(), fprintf()
và fscanf() để làm việc với tệp tệp Bằng cách sử dụng các hàm này, bạn có thể mở, đọc và ghi dữ liệu từ và vào các tệp tệp trên cứng Điều này cho phép bạn xử lý dữ liệu từ kho lưu trữ tệp tin hoặc lưu trữ kết quả tính toán của chương trình
Dữ liệu định dạng: stdio.h cho phép bạn định dạng dữ liệu khi hiển thị màn hình hoặc ghi vào tệp tệp Bằng cách sử dụng các định dạng đặc tả, chẳng hạn như %d, %f, %s, bạn có thể kiểm soát cách hiển thị hoặc lưu trữ dữ