Professional Documents
Culture Documents
HungBT 3121410236 LopT9T2 Bai9
HungBT 3121410236 LopT9T2 Bai9
Bài làm
Bài
1:
a. Tiến trình cha chuyển đối số đầu tiên (argv [1]) là một số nguyên
lớn hơn 3 cho tiến trình con thông qua message queue. Tiến trình con
nhận, tính giá trị n! = 1 * 2 * ... * n và ghi nó vào message queue. Tiến
trình cha nhận và xuất dữ liệu ra màn hình. Sử dụng message queue
để giải quyết vấn đề.
- Code:
- CMD Ubuntu:
b. Hãy thực hiện 2 tiến trình hoàn toàn riêng biệt, không sử dụng tiến
trình cha con. Giải quyết lại vấn đề trên.
- Code file send:
- Code file receive:
- CMD Ubuntu:
Bài 2:
a. Tiến trình cha đọc hai số nguyên và một thao tác +, -, x, / và chuyển tất cả cho
tiến trình con. Quá trình con tính toán kết quả và trả về cho tiến trình cha. Quá
trình cha xuất kết quả. Hãy giải quyết vấn đề trên với kỹ thuật message queue.
- Code:
key ftok( " . " , 1) ;
message.mesg type 1;
a atoi(argv[lj);
b atoi(argv[2j);
h r c ( h r) rgv [ J ;
if (pid B)
message.data 0;
h(c)
message.data a + b;
b reaI‹ ;
message.data a b;
b reaI‹ ;
case 'x':
message.data a b;
b reaI‹ ;
' /':
message.data a / b;
b reaI‹ ;
exit(0);
else
if (pid > B)
wait(NULL);
b. Hãy tách 2 tiến trình trên thành 2 tiến trình hoàn toàn độc lập. Giải quyết lại vấn
đề
trên.
messData[k].arr[i] - message.mesg_data.arr[i];
k;
it (message.done)
o r ( i t j = i +; j < k ; j)
y key1, key 2 ;
msgidl, msgid2;
key1 ( . , );
ms g i d1 = ( ke y1 , CREAT ) ;
message.mesg type = ;
key 2 ( . , );
ms g i d2 = ( ke y 2, CREAT ) ;
message.mesg data.sum = ’;