1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập nhập môn hệ điều hành lab 3 3

23 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo bài tập Nhập môn Hệ điều hành Lab 3
Tác giả Ngô Xuân Bình
Trường học Trường Đại học Tôn Đức Thắng
Chuyên ngành Công nghệ thông tin
Thể loại Báo cáo bài tập
Năm xuất bản 2023
Định dạng
Số trang 23
Dung lượng 1,81 MB

Nội dung

PHẦẦN TH C HÀNHỰVí D 1: ụ Biên d ch chịươ ng trình đầầu tiênA: Code Chươ ng Trình// hello.c#include void hello{printf"Hello world...!. //hello2.c#include void hello2int i{ printf"Hello p

Trang 1

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP NMHĐH

HK2, 2022-2023

Lab 3

1: Ngô Xuân Bình ( MSSV: 52200270)

Trang 2

B: Kếết Qu Demo ả 3

V Í D 2: T Ụ RUYÊẦN VÀ IN ĐỐỐI SỐỐ RA MÀN HÌNH 3

A: Code Ch ươ ng Trình 3

B: Kếết Qu Demo ả 4

V Í D 3: Ụ Ứ NG D NG Ụ THƯ VI N Ệ TĨNH VÀ TH Ư VI N Ệ Đ NG Ộ 4

A: Code Ch ươ ng Trình 4

B: Kếết Qu Demo ả 5

V Í D 4: T Ụ IÊỐN TRÌNH CĂN B N Ả 6

A: Code Ch ươ ng Trình 6

B: Kếết qu Demo ả 7

B PHẦẦN BÀI T P Ậ 8

BÀI 1: V IÊỐT CH ƯƠ NG TRÌNH SAU CHO KHI TRUYÊẦN ĐỐỐI SỐỐ N VÀO THÌ XUẦỐT RA T NG Ổ S = 1 + 2 + … + N 8

A: Code Ch ươ ng Trình: 8

B: Kếết Qu Demo: ả 9

BÀI 2: V IÊỐT CH ƯƠ NG TRÌNH NH P Ậ SỐỐ L ƯỢ NG PHẦẦN TỬ C A Ủ M NG Ả TỪ BIÊỐN MỐI TR ƯỜ NG , SAU ĐÓ NH P Ậ GIÁ TRỊ C A Ủ CÁC PHẦẦN T Ử TRONG M NG Ả VÀ TÍNH T NG Ổ C A Ủ CÁC PHẦẦN TỬ ĐÓ 9

A: Code Ch ươ ng Trình: 9

B: Kếết Qu Demo: ả 11

BÀI 3: T Ạ O T P Ệ LIB 1 C ĐỂ TÍNH T NG Ổ CÁC SỐỐ TỪ 1 ĐÊỐN N ; T P Ệ LIB 2 C CH A Ứ HÀM GIAI TH A Ừ CHO GIÁ TRỊ NGUYÊN TỪ 1 ĐÊỐN N , TRONG ĐÓ N LÀ ĐỐỐI SỐỐ ĐẦẦU VÀO VÀ N LÀ M T Ộ SỐỐ NGUYÊN D ƯƠ NG 12

A) T Ạ O THƯ VI N Ệ TĨNH LIBS S ; T Ạ O T P Ệ SELECTS C V I Ớ HÀM MAIN T RONG HÀM MAIN NÊỐU ARGV , [1] = 1, TH C Ự HI N Ệ TÍNH T NG Ổ TỪ 1 ĐÊỐN ARGV [2], NG ƯỢ C L I Ạ TH C Ự HI N Ệ TÍNH GIAI TH A Ừ TỪ 1 ĐÊỐN ARGV [2] - NHỚ S Ử D NG Ụ LIÊN KÊỐT THƯ VI N Ệ 12

B) T Ạ O THƯ VI N Ệ Đ NG Ộ LIBD D ; T Ạ O T P Ệ SELECTD C V I Ớ HÀM MAIN T RONG HÀM MAIN NÊỐU ARGV , [1] = 1, TH C Ự HI N Ệ TÍNH T NG Ổ TỪ 1 ĐÊỐN ARGV [2], NG ƯỢ C L I Ạ TH C Ự HI N Ệ TÍNH GIAI TH A Ừ TỪ 1 ĐÊỐN ARGV [2] - NHỚ S Ử D NG Ụ LIÊN KÊỐT THƯ VI N Ệ 12

A: Code Ch ươ ng Trình 12

B: Kếết Qu Demo: ả 16

BÀI 4: T Ạ O M T Ộ TIÊỐN TRÌNH TRONG CẦY TH Ư M C Ụ SAU TÊN IN GHI CHÚ , ID TIÊỐN TRÌNH , ID C A Ủ TIÊỐN TRÌNH CHA : 18

A: Code Ch ươ ng Trình 18

B: Kếết Qu Demo: ả 19

C KẾẾT LU N Ậ 20

Trang 5

Tạo thư viên tĩnh libh.a từ 2 file hello1.c và hello2.c

Tạo thư viện động libd.a từ 2 file hello1.c và hello2.c

B: Kêết Qu Demo

Chạy bằng thư viên tĩnh

Trang 6

Chạy bằng thư viên động

Trang 7

int main()

{

printf("current process ID: %d\n", getpid());

printf("parent process ID: %d\n", getppid());

Trang 9

// Nhập giá trị của n từ người dùng

printf("Nhập vào một số nguyên dương n: ");

if (scanf("%d", &n) != 1 || n <= 0) {

// Xử lý ngoại lệ: Nếu người dùng nhập không phải số nguyên dương // hoặc số âm, thì hiển thị thông báo và kết thúc chương trình printf("Vui lòng nhập một số nguyên dương.\n");

return 1; // Kết thúc chương trình với mã lỗi 1

}

// Tính tổng sử dụng vòng lặp

for (int i = 1; i <= n; i++) {

sum += i; // Cộng giá trị i vào tổng

}

// Hiển thị kết quả

printf("Tổng của %d số nguyên dương đầu tiên là: %d\n", n, sum);

return 0; // Kết thúc chương trình thành công

}

B: Kêết Qu Demo:

Báo lỗi nếu lời gọi có đối số không phải là một số nguyên dương

Trang 10

BÀI : Viêết ch2 ươ ng trình nh p sốế lậ ượ ng phầần t c a m ng t biêến mối ử ủ ả ừ

tr ng, sau đó nh p giá tr c a các phầần t trong m ng và tính t ng

int num_elements = atoi(env_var); // Chuyển đổi giá trị từ biến môi trường thành số nguyên

// Kiểm tra xem giá trị của num_elements có hợp lệ hay không

if (num_elements <= 0) {

printf("Giá trị của NUM_ELEMENTS không hợp lệ.\n");

Trang 11

return 1; // Kết thúc chương trình với mã lỗi 1 nếu giá trị không hợp lệ }

int sum = 0;

int element;

// Nhập giá trị của các phần tử và tính tổng

printf("Nhập giá trị cho %d phần tử:\n", num_elements);

for (int i = 0; i < num_elements; i++) {

printf("Phần tử %d: ", i + 1);

if (scanf("%d", &element) != 1) {

// Xử lý ngoại lệ: Nếu nhập không phải số nguyên, hiển thị thông báo lỗi

và kết thúc

printf("Lỗi: Vui lòng nhập số nguyên.\n");

return 1; // Kết thúc chương trình với mã lỗi 1

}

sum += element;

}

// Hiển thị tổng

printf("Tổng của các phần tử là: %d\n", sum);

return 0; // Kết thúc chương trình thành công

}

Trang 12

a Báo lỗi nếu không cài biến môi trường

b Báo lỗi nếu lời gọi có đối số không phải là một số nguyên dương

Trang 13

BÀI : T o t p lib1.c đ tính t ng các sốế t 1 đêến n; t p lib2.c ch a 3ạ ệ ể ổ ừ ệ ứ

hàm giai th a cho giá tr nguyên t 1 đêến n, trong đó n là đốếi sốế đầầu ừ ị ừ

vào và n là m t sốế nguyên dộ ương

A) T o th vi n tĩnh libs.s; T o t p selects.c v i hàm main Trong

hàm main, nêếu argv[1] = 1, th c hi n tính t ng t 1 đêến argv[2], ự ệ ổ ừ

ng c l i th c hi n tính giai th a t 1 đêến argv[2] - nh s d ng liên

kêết th vi n.ư ệ

B) T o th vi n đ ng libd.d; T o t p selectd.c v i hàm main Trong

hàm main, nêếu argv[1] = 1, th c hi n tính t ng t 1 đêến argv[2], ự ệ ổ ừ

ng c l i th c hi n tính giai th a t 1 đêến argv[2] - nh s d ng liên

printf("Lỗi: n phải là số nguyên dương.\n");

return -1; // Kết thúc chương trình với mã lỗi -1

Trang 14

if (n < 1) {

printf("Lỗi: n phải là số nguyên dương.\n"); return -1; // Kết thúc chương trình với mã lỗi -1 }

#include "lib1.c" // Sử dụng thư viện tính tổng

#include "lib2.c" // Sử dụng thư viện tính giai thừa

int main(int argc, char *argv[]) {

if (argc != 3) {

printf("Sử dụng: %s [1|2] [n]\n", argv[0]); return 1;

Trang 15

}

int option = atoi(argv[1]);

int n = atoi(argv[2]);

if (option != 1 && option != 2) {

printf("Lựa chọn không hợp lệ Sử dụng 1 để tính tổng hoặc 2 để tínhgiai thừa.\n");

Trang 16

if (option != 1 && option != 2) {

printf("Lựa chọn không hợp lệ Sử dụng 1 để tính tổng hoặc 2 để tínhgiai thừa.\n");

return 1;

}

void *lib; // Con trỏ thư viện động

int (*calculate)(int); // Con trỏ hàm tính tổng hoặc giai thừa

// Mở thư viện động libd.d

lib = dlopen("./libd.d", RTLD_LAZY);

if (!lib) {

printf("Lỗi khi mở thư viện động.\n");

return 1;

}

Trang 17

// Liên kết động hàm tính tổng hoặc giai thừa

printf("Lỗi khi liên kết động hàm.\n");

dlclose(lib); // Đóng thư viện động

printf("Giai thừa của %d là: %d\n", n, result); }

}

dlclose(lib); // Đóng thư viện động

return 0;

Trang 18

f) Biên dịch lib1.c và lib2.c thành thư viên động:

g) Biên dịch selects.c

h) Biên dịch selectd.c

Trang 19

B: Kêết Qu Demo:

a) Kết quả chạy thử của selects.c với thư viên tĩnh libs.s

- Một số trường hợp phát sinh lỗi

b) Kết quả chạy thử của selectd.c với thư viện động libd.d

- Một số trường hợp phát sinh lỗi

Trang 20

BÀI 4: T o m t tiêến trình trong cầy th m c sau tên in ghi chú, ID tiêến ạ ộ ư ụ

Trang 23

C KẾẾT LU N

Sau khi học và hoàn thành phần lab 3 nhóm thu được kết sau:

- Biết được cách biên dịch và chạy chương trình C cơ bản trên hệ điều hành linux.

- Biết được cách ứng dụng thư viên tĩnh và động vào trong các chương trình C.

- Liên tục thực hành và thuần thục cách điều khiển command-line trên

hệ điều hành linux.

- Hiểu được cơ chế hoạt động của tiến trình trong hệ điều hành

Ngày đăng: 08/05/2024, 16:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w