Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
482 changes: 440 additions & 42 deletions .gitignore

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.22)
project(OS C)

set(CMAKE_C_STANDARD 99)

add_executable(OS write-read.c open1.c open2.c fork1.c fork2.c wait1.c wait2.c wait3.c)
1 change: 1 addition & 0 deletions F1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
asdasfahgjgh456345fghjhj
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,28 @@
# OS
Operation systems course LPNU 2022

Використовуючи read та read1 як основу, а також приклади з використанням виклику write() напишіть:

read() write()
1. програму яка буде читати максимум 15 символів які введе користувач і виведіть їх на екран (write-read.c)
2. програму яка буде виводити кількість символів які були прочитаними викликом read() (write-read.c)

open()
3. Напишіть програму для читання вмісту файлу F1 у файл F2. Вміст файлу F2 не повинен бути видалений або перезаписаний. підказка: використовуйте прапор O_APPEND (open1.c)
4. Напишіть програму за допомогою системного виклику open() для копіювання вмісту одного файлу в інший файл. (open2.c)

fork()
5. Напишіть програму за допомогою системного виклику fork() для створення двох дочірніх процесів, тобто батьківського P, що має дочірні процеси P1 і P2. (fork1.c)
6. Напишіть програму, використовуючи системний виклик fork(), щоб створити ієрархію з трьох процесів, так що P2 є дочірнім до P1, а P1 — дочірнім до P. (fork2.c)

wait()
7. Створіть стосунки «parent-child» між двома процесами. (wait1.c)
Parent має надрукувати два твердження:
A) Parent (P) має ідентифікатор
B) Ідентифікатор child P — <PID_of_Child>
Child повинна надрукувати два вислови:
C) У child є ідентифікатор
D) Мій parent ідентифікатор <PID_of_Parent>
Використовуйте wait() таким чином, щоб порядок чотирьох операторів A, B, C і D був: A B C D
8. Створіть зв’язок «parent-child» між двома процесами, щоб процес «child» створив файл з іменем Relation.txt, а процес «parent» записав в нього деякий вміст, беручи вхідні дані від користувача. (wait2.c)
9. Напишіть програму для створення двох дочірніх процесів. Батьківський процес повинен почекати, поки обидва дитини закінчать. (wait3.c)
22 changes: 22 additions & 0 deletions fork1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>


int main()
{
printf("Parent process (P0), pid = %d\n", getpid());
pid_t child1, child2;
child1 = fork();
if (child1 == 0) {
printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid());
}
else {
child2 = fork();
if (child2 == 0){
printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid());
}
wait(NULL);
}
}
23 changes: 23 additions & 0 deletions fork2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>


int main()
{
printf("Parent process (P0), pid = %d\n", getpid());
pid_t child1, child2;
child1 = fork();
if (child1 == 0) {
printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid());
child2 = fork();
if (child2 == 0){
printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid());
}
wait(NULL);
} else {
wait(NULL);
}

}
14 changes: 14 additions & 0 deletions open1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include<stdio.h>
int main()
{
char c;
FILE *f1,*f2;
f1 = fopen("F1.txt", "r");
f2 = fopen("F2.txt", "a");
c = fgetc(f1);
while (c != EOF)
{
fputc(c, f2);
c = fgetc(f1);
}
}
21 changes: 21 additions & 0 deletions open2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include<stdio.h>

int main()
{
char c;
FILE *f1,*f2;
char name1[100];
char name2[100];
printf("Enter the file1 to open for reading \n");
scanf("%s", name1);
printf("Enter the file2 to open for writing \n");
scanf("%s", name2);
f1 = fopen(name1, "r");
f2 = fopen(name2, "a");
c = fgetc(f1);
while (c != EOF)
{
fputc(c, f2);
c = fgetc(f1);
}
}
20 changes: 20 additions & 0 deletions wait1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>


int main()
{
pid_t child1;
child1 = fork();
if (child1 != 0) {
printf("Parent process (P0), pid = %d\n", getpid());
printf("Child process (P1), pid = %d\n", child1);
}
if (child1 == 0) {
printf("My pid = %d (P1)\n", getpid());
printf("My parent = %d (P0)\n", getppid());
}
wait(NULL);
}
22 changes: 22 additions & 0 deletions wait2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>


int main()
{
char str1[100];
pid_t child1;
FILE *f1;
child1 = fork();
if (child1 == 0) {
fopen("Relation.txt", "a");
}else {
wait(NULL);
f1 = fopen("Relation.txt", "w");
scanf("%99s", str1);
fprintf(f1, "%s", str1);
}
}
25 changes: 25 additions & 0 deletions wait3.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>


int main()
{
pid_t child1, child2;
child1 = fork();
if (child1 == 0) {
printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid());
return 0;
}
else {
child2 = fork();
if (child2 == 0){
printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid());
return 0;
}
wait(NULL);
wait(NULL);
printf("Parent process (P0), pid = %d\n", getpid());
}
}
11 changes: 11 additions & 0 deletions write-read.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include "stdio.h"
#include "unistd.h"

#define COUNT 15

int main() {
char buff[COUNT + 1];
int count = read(STDIN_FILENO, buff, COUNT);
printf("Length of input is: %d\n", count);
write(STDOUT_FILENO, buff, count);
}