mirror of
https://github.com/ada-dmitry/tmp_project.git
synced 2026-09-24 01:10:31 +00:00
reboot
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
int linesWritten = 0;
|
||||
|
||||
void signalHandler(int signal)
|
||||
{
|
||||
printf("Number of lines written: %d\n", linesWritten);
|
||||
}
|
||||
|
||||
void writeFile(const char *fileName, int numLines, const char *placeholder)
|
||||
{
|
||||
int fd = open(fileName, O_CREAT | O_WRONLY | O_TRUNC, 0666);
|
||||
|
||||
if (fd == -1)
|
||||
{
|
||||
printf("Failed to open the file\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1)
|
||||
{
|
||||
printf("Failed to lock file for exclusive use\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
signal(SIGINT, signalHandler);
|
||||
|
||||
// lseek(fd, 0, SEEK_END);
|
||||
|
||||
for (int i = 0; i < numLines; i++)
|
||||
{
|
||||
dprintf(fd, "%s\n", placeholder);
|
||||
linesWritten++;
|
||||
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
if (flock(fd, LOCK_UN) == -1)
|
||||
{
|
||||
printf("Failed to unlock file\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc != 4)
|
||||
{
|
||||
printf("Usage: %s <filename> <number of lines> <placeholder>\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
const char *fileName = argv[1];
|
||||
if (strstr(fileName, ".txt") == NULL)
|
||||
{
|
||||
printf("The provided file must be ended with .txt\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int numLines = atoi(argv[2]);
|
||||
if (numLines <= 0)
|
||||
{
|
||||
printf("The number of lines must be a positive integer\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
char *placeholder = argv[3];
|
||||
while (*placeholder)
|
||||
{
|
||||
if (!isalnum(*placeholder) && !isspace(*placeholder))
|
||||
{
|
||||
printf("The placeholder must consist of letters and numbers\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
placeholder++;
|
||||
}
|
||||
|
||||
writeFile(fileName, numLines, argv[3]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
Руководство для пользователя:
|
||||
|
||||
1. Что делают функции:
|
||||
Функция writeFile отвечает за запись определяемого пользователем количества строк в указанный файл, используя указанную строку в качестве заполнителя.
|
||||
Обратите внимание: при записи в файл одним процессом другие процессы не будут иметь к нему (к файлу) доступа - они начнут заполнять его только лишь после окончания работы первого.
|
||||
Файл не перезаписывается новым процессом, а продолжает пополняться новыми строками со следующей после
|
||||
последней строки.
|
||||
|
||||
Функция signalHandler используется для обработки прерывания программы через сигнал, который подаётся при помощи комбинации клавиш Ctrl+C.
|
||||
|
||||
|
||||
2. Как компилировать программу:
|
||||
Для компиляции программы необходимо использовать компилятор языка C, например gcc.
|
||||
Пример команды для компиляции программы: открываем терминал, в строке пишем
|
||||
gcc program.c -o program.
|
||||
Здесь "program" - название скомпилированного файла, а "program.c" - название файла с исходным кодом программы.
|
||||
|
||||
|
||||
4. Как выводить промежуточный результат программы:
|
||||
Промежуточный результат программы будет выводиться автоматически при нажатии клавиш Ctrl+C.
|
||||
|
||||
|
||||
5. Пример использования программы:
|
||||
Программа принимает три аргумента командной строки: название файла, количество строк для записи и строку-заполнитель.
|
||||
Например, для записи 10 строк в файл "test.txt" с использованием строки "Hello", необходимо выполнить следующую команду:
|
||||
./program test.txt 10 Hello.
|
||||
При этом, промежуточный результат будет выводиться при нажатии клавиш Ctrl+C.
|
||||
|
||||
|
||||
6. Предостережения или что НЕ нужно делать, чтобы программа работала корректно:
|
||||
- использовать для заполнения файлы только с расширением .txt;
|
||||
- использовать в строке-заполнителе цифры и буквы латинского алфавита, для использования специальных символов (это - &, ', \, |)
|
||||
именно как элементов строки-заполнителя необходимо для правильной работы программы экранировать их, т.е. использовать \ перед ними;
|
||||
- использование данной программы предполагается на машинах с предустановленной ОС Debian (12-й версии);
|
||||
@@ -0,0 +1,36 @@
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
mia
|
||||
@@ -34,7 +34,7 @@ void show_grapgh()
|
||||
}
|
||||
fprintf(gp, "set xrange [-500:500]\n");
|
||||
fprintf(gp, "set yrange [0:500]\n");
|
||||
fprintf(gp, "plot %s\n", func);
|
||||
fprintf(gp, "plot %s, 0\n", func);
|
||||
fflush(gp); // очищение буфера вывода
|
||||
sig_flag = 1;
|
||||
printf("Нажмите любую клавишу, чтобы продолжить...\n");
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user