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

22 0 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo bài tập nhập môn hệ điều hành lab 3 1

Đ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

PHẦN THỰC HÀNHVí Dụ 1: Biên dịch chương trình hello.cB: Kết Quả DemoVí Dụ 2: Biên dịch chương trình truyền đối số và in ra các đối số đó2.1: Code chương trìnhA.. Code chương trình//main.

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ĐHHK1, 2023-2024

Lab 3Nhóm: 01 Tổ: 02

1: Nguyễn Thanh Sơn ( MSSV: 52200287)

Trang 2

Mục lục……….

Trang 3

A PHẦN THỰC HÀNHVí Dụ 1: Biên dịch chương trình hello.c

B: Kết Quả Demo

Ví Dụ 2: Biên dịch chương trình truyền đối số và in ra (các) đối số đó

2.1: Code chương trìnhA Code chương trình//main.c

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

printf("so doi so truyen vao: %i\n", argc); // in ra số đối số truyền vàoprintf("gia tri cac doi so: ");

Trang 4

int i = 0;

for(int i=0; i < argc; i++) // tạo vòng lặp in ra các đối số truyền vàoprintf("%s\t", argv[i]);

B Kết quả Demo

Ví Dụ 3.1: Sử dụng thư viện tỉnh để biên dịch chương trìnhA Code chương trình

//hello1.c#include<stdio.h>void hello1(int i) {

printf("Hello parameter 1 = %d \n", i); //in ra màn hình tham số 1}

//hello2.c#include<stdio.h>void hello2(int i) {

printf("Hello parameter 2 = %d \n", i); //in ra màn hình tham số 2}

//main.c

Trang 5

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

int i = atoi(argv[1]); // ép kiểu char về int bằng hàm atoiint k = atoi(argv[2]); // ép kiểu char về int bằng hàm atoihello1(i); // gọi hàm hello1

hello2(k); // gọi hàm hello2}

B Kết quả demo

Ví dụ 3.2: Sử dụng thư viện động để biên dịch chương trình

//hello1.c#include<stdio.h>void hello1(int i) {

printf("Hello parameter 1 = %d \n", i); //in ra màn hình tham số 1}

//hello2.c#include<stdio.h>void hello2(int i) {

Trang 6

printf("Hello parameter 2 = %d \n", i); //in ra màn hình tham số 2}

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

int i = atoi(argv[1]); // ép kiểu char về int bằng hàm atoiint k = atoi(argv[2]); // ép kiểu char về int bằng hàm atoihello1(i); // gọi hàm hello1

hello2(k); // gọi hàm hello2}

Ví dụ 4: Tạo tiến trìnhA Code chương trình

#include<stdio.h>#include<unistd.h>int main() {

printf("current process ID: %d\n", getpid());printf("Parent process ID: %d\n", getppid());return 0;

}

Trang 7

#include<stdio.h>#include<unistd.h>int main() {

pid_t pid;

if( (pid=fork()) == 0) {

printf("child process: child ID = %d\n", getpid());printf("My parent id: Parent ID = %d\n", getppid());} else if(pid > 0) {

printf("parent process: parent ID = %d\n", getpid());printf("child id = %d\n", pid);

} else {

printf("fork error!\n");}

return 0;}

#include<stdio.h>#include<unistd.h>int main() {

int pid, pid1;

Trang 8

if( (pid = fork()) == 0) {printf(" -B -\n");

printf("This is B: ID = %d\n", getpid());printf("Parent: A ID = %d\n", getppid());printf(" -end B -\n");

} else if(pid > 0) {

if( (pid1 = fork()) == 0) {printf(" -C -\n");

printf("This is C: ID = %d\n", getpid());printf("Parent: A ID = %d\n", getppid());printf(" -end C -\n");

return 0;}

B Kết quả demo

Trang 10

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

int a = atoi(argv[1]); // ép kiểu char về int thông qua ham atoi

if(argc >2) // kiem tra dieu kien doi so vao thoa man =2 hay khong

printf("Doi so truyen vao qua nhieu \n");

else if(a<=0) //kiểm tra điều kiện a có thỏa mản <= 0 hay không

printf("Doi so nhap vao khong phai la so nguyen duong\n"); else {

int sum =0;

for(int i=0; i<=a; i++) // chạy vòng lặp để tính tổng từ 1 tới n

sum = sum + i;printf("S = %i\n",sum); }

return 0;}

B: Kết Quả Demo:

a 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 11

b Báo lỗi nếu có nhiều hơn 2 đối số (là main.out và n).

Bài 2: Viết chương trình nhận một đối số từ môi trường là số phần tử trong mảng, nhập giá trị của tất cả các phần tử trong mảng, xuất tổng của mảng đó ra khỏi màn hình.

a Báo lỗi nếu n không phải là số nguyên dương

b Báo lỗi nếu khác n+2 đối số (là ex2.out, n và n phần tử trong mảng).

A: Code Chương Trình:

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

int n = atoi(argv[1]); //ép kiểu char về int thông qua hàm atoi

Trang 12

double check = atof(argv[1]); //ép kiểu char về double thông qua hàm atof

int arr[n]; //khai báo mảng arr gồm n phần tử

if(n <= 0 || n != check) //kiểm tra điều kiện n có là số nguyên dương không

printf("So luong phan tu phai la so nguyen duong\n");else if( argc != n + 2) //kiểm tra điều kiện đối số vào thỏa mản = n+2

printf("Doi so truyen vao khong hop le\n");else {

int i; // khởi tạo i

double sum = 0; // khởi tạo sum

for(i = 0; i < n; i++) { // chạy vòng lặp để:

arr[i] = atof(argv[i+2]); // lưu giá trị vào mảng

sum += atof(argv[i+2]); // tính tổng các phần tử trong mảng

printf("Tong cac phan tu trong mang: %f\n", sum);}

return 0;}

B: Kết Quả Demo:

a Báo lỗi nếu n không phải là số nguyên dương

Trang 13

b Báo lỗi nếu khác n+2 đối số (là ex2.out, n và n phần tử trong mảng).

Ví Dụ 3: Tạo tệp lib1.c tính tổng các số từ 1 đến n; lib2.c có hàm giai thừa có giá trị nguyên từ 1 đến n, trong đó n là đối số đầu vào, n là số nguyên dương.

1) Tạo thư viện liên kết tĩnh libs.s; Tạo một tệp select.c với chức năng chính Trong hàm main, nếu argv [1] = 1 thực hiện tính tổng các số từ 1 đến argv [2] thì hàm còn lại thực hiện tính giai thừa các số từ 1 đến argv [2]

2) Tạo thư viện liên kết động libd.d; Tạo file selectd.c với hàm main Trong hàm main, argv [1] = 1 thực hiện tính tổng các số từ 1 đến argv [2], hàm còn lại thực hiện phân tích nhân tử các số từ 1 đến argv [2] – nhớ sử dụng liên kết thư viện.

a Báo lỗi nếu số tham số truyền vào khác 3

b Báo lỗi nếu n nhập vào không phải là số nguyên dươngA: Code chương trình

#include<stdio.h>#include<stdlib.h>

Trang 14

int lib1(int n) {int i = 0, sum = 0;

for(i; i <= n; i++) // tạo vòng lặp để tính tổngsum += i;

printf("Tong cac so tu 1 den %d la: %d\n", n, sum);return 0;

}//lib2.c

Trang 15

int main(int agrc, char ** agrv) {int n1 = atoi(agrv[1]);int n2 = atoi(agrv[2]);

if(agrc != 3) // kiểm tra số tham số có khác 3 khôngprintf("So tham so khong hop le\n");

else if(n1 <= 0 || n2 <= 0 || n1 != atof(agrv[1]) || n2 != atof(agrv[2]))// kiểm tra n có phải là số nguyên dương không

printf("n phai la so nguyen duong\n");else if(n1 == 1) { // kiểm tra argv[1] có = 1 không

lib1(n2);lib2(n2);} else {

return 0;}

B: Kết quả demo

Trang 16

a Báo lỗi nếu số tham số truyền vào khác 3

b Báo lỗi nếu n nhập vào không phải là số nguyên dương

Ví Dụ 4:

A: Code chương trình

#include <stdio.h>#include <unistd.h>

int main(){

pid_t pid1, pid2, pid3, pid4, pid5;

Trang 17

pid1 = fork();if(pid1 < 0){

printf("Fork error! No C created!\n");} else if(pid1 == 0){

printf("Hello from C\n");printf("C ID is %d\n", getpid());

printf("My parent A PID is %d\n", getppid());pid2 = fork();

if(pid2 < 0){

printf("Fork error! No H created\n");} else if(pid2 == 0){

printf("Hello from H\n");printf("H ID is %d\n", getpid());

printf("My parent C PID is %d\n", getppid());}

else {sleep(3);

printf("Hello from C\n");printf("C ID is %d\n", getpid());printf("My child H PID is %d\n", pid2);}

}else{

Trang 18

printf("Hello from A\n");printf("A ID is %d\n", getpid());printf("My child C PID is %d\n", pid1);pid3 = fork();

if(pid3 < 0){

printf("Fork error! No B created\n");} else if(pid3 == 0){

printf("Hello from B\n");printf("B ID is %d\n", getpid());

printf("My parent A PID is %d\n", getppid());pid4 = fork();

if(pid4 <0){

printf("Fork error! No D created\n");} else if(pid4 == 0){

printf("Hello from D\n");printf("D ID is %d\n", getpid());

printf("My parent B PID is %d\n", getppid());}

else {sleep(3);

printf("Hello from B\n");printf("B ID is %d\n", getpid());

Trang 19

printf("My child D PID is %d\n", pid4);pid5 = fork();

} else {sleep(3);

printf("Hello from B\n");printf("B ID is %d\n", getpid());printf("My parent E PID is %d\n", pid5);}

}}else {

printf("Hello from A\n");printf("A ID is %d\n", getpid());printf("My parent B PID is %d\n", pid3);}

Trang 20

B: Kết quả demo

Trang 21

KẾT LUẬN

Sau khi học và hoàn thành phần lab 3 nhóm thu được kết sau:- Em học được cách tìm ID cha và con của process- Em học được cách sử thư viện động

- Em học được cách sử thư viện tĩnh

Chú ý bài làm giống nhau sẽ bị trừ điểm.

Trang 22

KẾT QUẢ LÀM VIỆC CÁC THÀNH VIÊN TRONG NHÓM

Nguyễn Văn A12345678

CHÚ THÍCH:TN: TRƯỞNG NHÓMTV: THÀNH VIÊN

HT: MỨC ĐỘ HOÀN THÀNH CÔNG VIỆC ĐƯỢC GIAO

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

Tài liệu cùng người dùng

Tài liệu liên quan