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 1

22 0 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ả Nguyễn Thanh Sơn
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
Năm xuất bản 2023-2024
Định dạng
Số trang 22
Dung lượng 852,69 KB

Nội dung

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ĐH

HK1, 2023-2024 Lab 3Nhóm: 01 Tổ: 02

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

Trang 2

Mục lục

……….

Trang 3

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 5

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

int i = atoi(argv[1]); // ép kiểu char về int bằng hàm atoi

int k = atoi(argv[2]); // ép kiểu char về int bằng hàm atoi

hello1(i); // gọi hàm hello1

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

Trang 6

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

//main.c

#include<stdio.h>

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

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

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

return 0;

}

Trang 7

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

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");

Trang 10

B PHẦN BÀI TẬPBÀI 1: Viế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

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.

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

A: Code Chương Trình:

Chúy ý: code phải được giải thích để thể hiện hiểu rõ chương trình mình biết

#include <stdio.h>

#include <stdlib.h>

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");

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:

#include<stdio.h>

#include<stdlib.h>

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

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ương

A: Code chương trình

//lib1.c

#include<stdio.h>

#include<stdlib.h>

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ông

printf("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

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

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);}

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 A 1234567

8

% TV

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

w