- •Завдання
- •Теоретичні відомості
- •Завдання 1
- •Лістинг програми
- •Результат роботи програми
- •Завдання 2
- •Лістинг програми
- •Результат роботи програми
- •Завдання 3
- •Лістинги програм
- •Результати виконання програм
- •Завдання 4
- •Лістинги програм
- •Результати виконання програм
- •Завдання 5
- •Лістинги програм
- •Результати виконання програм
- •Завдання 6
- •Результат виконання завдання
- •Висновок
Завдання 1
Сценарії на мові Shell. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.
Лістинг програми
while true
do
echo "Скрипт работы с процессами";
echo "1. Количество запущенных процессов";
echo "2. Завершить все процессы";
echo "3. Выход";
echo "Выберите один из пунктов:";
read key;
case $key in
1)
while true
do
echo "Введите имя пользователя:";
read name;
echo `ps -au$name | wc -l`;
read name;
break;
done;;
2)
while true
do
echo "Введите имя пользователя:";
read name;
echo `killall -u$name`;
read name;
break;
done;;
3)
break;;
esac;
done;
Результат роботи програми
Завдання 2
Unix процеси. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.
Лістинг програми
#include < stdio.h >
int main() {
for (;;) {
char name[15], command[25];
int st;
printf("Скрипт работы с процессами\n");
printf("1. Количество запущенных процессов\n");
printf("2. Завершить все процессы\n");
printf("3. Выход\n");
printf("Выберите один из пунктов:\n");
int key;
scanf("%d", & key);
switch (key) {
case 1:
printf("Введите имя пользователя:\n");
scanf("%s", name);
sprintf(command, "ps -au%s | wc -l", name);
if (fork() == 0) {
system(command);
}
wait(&st);
break;
case 2:
printf("Введите имя пользователя:\n");
scanf("%s", name);
sprintf(command, "killall -u%s", name);
if (fork() == 0) {
system(command);
}
wait(&st);
break;
case 3:
return 0;
}
}
}
Результат роботи програми
Завдання 3
Організація взаємодії процесів за допомогою каналів.
а. Знайти індекси i та j, для яких існує найбільша послідовність a[i] - a [i +1] + a [i +2] - a [i +3] ... + / - a [j]. Вхідні дані: ціле позитивне число n, масив чисел А розмірності n.
б. Перший додаток чекає введення чисел a, b, c і відсилає їх другий додатком, яке знаходить рішення рівняння ax2+bx+c= 0, і відсилає результат першому додатку.
Лістинги програм
Програма а:
#include<stdio.h>
int compare(int[], int, int);
void findSequence(int[], int);
int main() {
int i, j, k, n, st;
int a[100];
int fd[2];
pipe(fd);
if (fork() == 0) {
printf("Введите число n: ");
int z;
scanf("%d", &z);
write(fd[1], &z, sizeof(int));
return 1;
}
wait(&st);
read(fd[0], &n, sizeof(int));
srand(time(0));
printf("Массив чисел: ");
for (i = 0; i < n; i++) {
a[i] = (rand() % 40) - 20;
printf("%4d", a[i]);
}
printf("\n");
findSequence(a, n);
return 0;
}
int compare(int a[], int n, int m) {
if ((a[n] > 0 && a[m] < 0) || (a[n] < 0 && a[m] > 0)) {
return 1;
}
return 0;
}
void findSequence(int a[], int n) {
int maxlen = 1, maxtmp = 1, indextmp = 1, indexmax, i;
for (i = 0; i < n-1; i++) {
if (compare(a, i, i+1)) {
maxtmp = maxtmp+1;
} else {
if (maxtmp > maxlen) {
maxlen = maxtmp;
indexmax = indextmp;
}
indextmp = i+1;
maxtmp = 1;
}
}
printf("Результат: %d .. %d\n", indexmax+1, (indexmax+maxlen));
}
Програма б:
#include<stdio.h>
#include<fcntl.h>
int main()
{
int a[3];
printf("Введите 3 числа:\n");
scanf("%d", &a[0]);
scanf("%d", &a[1]);
scanf("%d", &a[2]);
mkfifo("mypipe",0777);
int fd[2];
fd[0] = open("mypipe", O_WRONLY);
write(fd[0], &a, sizeof(a));
close(fd[0]);
char result[30];
fd[1] = open("mypipe", O_RDONLY);
read(fd[1], &result, sizeof(result));
printf("Результат:\n%s\n", result);
close(fd[1]);
}
#include<stdio.h>
#include<fcntl.h>
#include<math.h>
void calculate(int, int, int);
char result[30];
int main()
{
int fd[2];
int a[3];
fd[0] = open("mypipe", O_RDONLY);
read(fd[0], &a, sizeof(a));
calculate(a[0], a[1], a[2]);
close(fd[0]);
fd[1] = open("mypipe", O_WRONLY);
write(fd[1], &result, sizeof(result));
close(fd[1]);
}
void calculate(int a, int b, int c)
{
int d = b*b-4*a*c;
if (d < 0)
{
sprintf(result, "Нет решений");
}
else if (d == 0)
{
double x = -b / (2 * a);
sprintf(result, "x = %.3f", x);
}
else
{
double x1, x2;
x1 = (-b + sqrt(d)) / (2.0 * a);
x2 = (-b - sqrt(d)) / (2.0 * a);
sprintf(result, "x1 = %.3f, x2 = %.3f", x1, x2);
}
}
