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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# OS
4 changes: 4 additions & 0 deletions error.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
thread_game.c
- не выдается сообщения об ошибке при открытие несуществующего файла или файла, к которому нет прав доступа
- при заполнении всего экрана символы начинают перезатираться в правом нижнем углу
- если нет make-файла в где-то должно быть написано как это все собирается. Собирал по памяти, а должен был через make файл
42 changes: 42 additions & 0 deletions fork.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char* argv[])
{
int pid = fork ();
char parent_filename[41] = "process_";
char child_filename[41] = "process_";
char buffer_parent [30];
char buffer_child [30];
if (pid == -1)
printf ("Error \n");
else if (pid != 0)
{
wait(NULL);
printf("parent %d\n", getpid());
sprintf (buffer_parent, "%d", getpid());
sprintf (buffer_child, "%d", pid);
strcat(parent_filename, buffer_parent);
FILE * parent_file = fopen(parent_filename,"wb");
strcat (buffer_parent, " - parent\n");
strcat (buffer_child, " - child\n");
fwrite(buffer_parent, strlen(buffer_parent), 1, parent_file);
fwrite(buffer_child, strlen(buffer_child), 1, parent_file);
fclose(parent_file);
}
else
{
printf ("child %d\n", getpid());
sprintf (buffer_child, "%d", getpid());
strcat(child_filename, buffer_child);
sprintf (buffer_child, "%d", getppid());
FILE * child_file = fopen(child_filename,"wb");
fwrite(buffer_child, strlen(buffer_child), 1, child_file);
fclose(child_file);
}
return 0;
}
24 changes: 12 additions & 12 deletions pid.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,32 @@

int main()
{
char p_data[15]; // � ��� ������ ����� �������� ������, ������� ����� �������� � �����
char p_data[15]; // в эти строки будут записаны данные, которые нужно записать в файлы
char c_data[15];
char p_filename[32] = "parent_process_id"; // � ��� ������ ����� �������� �������� ����������� ���������� ������
char p_filename[32] = "parent_process_id"; // в эти строки будут записаны названия создаваемых процессами файлов
char c_filename[31] = "child_process_id";

int pid = fork(); // �������� ������������ �������
int pid = fork(); // копируем родительский процесс

if (pid == -1) { printf("Error, child process is not created\n"); } // ���� fork() ���������� ������
if (pid == -1) { printf("Error, child process is not created\n"); } // если fork() возвращает ошибку

if (pid == 0) // ��� ��������� ��������
if (pid == 0) // для дочернего процесса
{
snprintf(c_data, 15, "%d", getpid()); //���������� pid ��������� �������� � ������
strcat(c_filename, c_data); // �������� ��� �����, ������������ �������� ���������, ���������� pid
snprintf(c_data, 15, "%d", getppid()); //���������� ppid ��������
snprintf(c_data, 15, "%d", getpid()); //записываем pid дочернего процесса в строку
strcat(c_filename, c_data); // получаем имя файла, создаваемого дочерним процессом, содержащее pid
snprintf(c_data, 15, "%d", getppid()); //записываем ppid процесса
FILE * c_file = fopen(c_filename, "wb");
fwrite(c_data, strlen(c_data), 1, c_file);
fclose(c_file);
}

else // ��� ������������� �������� (���� fork() ������ pid ���������)
else // для родительского процесса (если fork() вернул pid дочернего)
{

wait();
snprintf(p_data, 15, "%d", getpid()); // ���������� � ������ pid ������������� ��������
snprintf(c_data, 15, "%d", pid); // ���������� � ������ pid ��������� ��������
strcat(p_filename, p_data); // �������� ��� �����, ������������ ������������ ���������
snprintf(p_data, 15, "%d", getpid()); // записываем в строку pid родительского процесса
snprintf(c_data, 15, "%d", pid); // записываем в строку pid дочернего процесса
strcat(p_filename, p_data); // получаем имя файла, создаваемого родительским процессом

strcat(p_data, "\n");
FILE * p_file = fopen (p_filename, "wb");
Expand Down
65 changes: 65 additions & 0 deletions thread_game.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <unistd.h>
#include <pthread.h>

void *print_func (void * arg)
{
char buffer;
fread(&buffer, 1, 1, arg);
while (!feof(arg))
{
printw("%c", buffer);
usleep(10000);
fread(&buffer, 1, 1, arg);
refresh();
}
refresh();
pthread_exit(NULL);
}

int main()
{
initscr();
printw("Enter the path to the file \n"); /*путь до файла, мои превосходные знания английского*/
char filename[80];
getstr(filename);
FILE * file = fopen(filename, "r");
if (file==NULL)
{
printw("Ошибка при открытии файла");
return 1;
}
else printw("C - start/continue\nS - pause\nQ - quit \n\n");
/*C - начать/продолжить работу S - поставить программу на паузу Q - выход из программы*/
pthread_t print;
int buf = getch();
printw("\n");
bool work = false;
while (1)
{
if (work == false && (buf=='c' || buf=='C'))
{
pthread_create(&print, NULL, print_func, file);
work = true;
}
if (buf=='s' || buf=='S')
{
pthread_cancel(print);
work = false;
}
if (buf=='q' || buf=='Q')
{
pthread_cancel(print);
break;
}
buf = getch();
printw("\n");
}
pthread_join(print, NULL);
refresh();
system("pause");
endwin();
return 0;
}