diff --git a/.idea/APD_L1.iml b/.idea/APD_L1.iml
deleted file mode 100644
index bc2cd87..0000000
--- a/.idea/APD_L1.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 5831729..8605cd9 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -3,6 +3,7 @@
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 68efe60..48335e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,12 @@
cmake_minimum_required(VERSION 3.26)
-project(untitled C)
+project(bib C)
set(CMAKE_C_STANDARD 11)
-add_executable(untitled main.c)
+add_library(biblioteka SHARED lib/library.c lib/library.h)
+set_target_properties(biblioteka PROPERTIES LINKER_LANGUAGE C)
+
+add_executable(bib main.c libBib.h)
+target_link_libraries(bib biblioteka)
+
+
diff --git a/gitignore.gitignore b/gitignore.gitignore
deleted file mode 100644
index d412424..0000000
--- a/gitignore.gitignore
+++ /dev/null
@@ -1,71 +0,0 @@
-CMakeLists.txt.user
-CMakeCache.txt
-CMakeFiles
-CMakeScripts
-Testing
-Makefile
-cmake_install.cmake
-install_manifest.txt
-compile_commands.json
-CTestTestfile.cmake
-_deps
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-# User-specific stuff
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-# AWS User-specific
-.idea/**/aws.xml
-# Generated files
-.idea/**/contentModel.xml
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn. Uncomment if using
-# auto-import.
-# .idea/artifacts
-# .idea/compiler.xml
-# .idea/jarRepositories.xml
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
-# *.iml
-# *.ipr
-# CMake
-cmake-build-*/
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-# File-based project format
-*.iws
-# IntelliJ
-out/
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-# JIRA plugin
-atlassian-ide-plugin.xml
-# Cursive Clojure plugin
-.idea/replstate.xml
-# SonarLint plugin
-.idea/sonarlint/
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
-# Editor-based Rest Client
-.idea/httpRequests
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
\ No newline at end of file
diff --git a/main.c b/main.c
index bdeaff4..e8dac47 100644
--- a/main.c
+++ b/main.c
@@ -1,302 +1,50 @@
+//
+// Created by rsuslov on 23.11.2023.
+//
#include
#include
-#include
+#include "libBib.h"
-int getLogicalDriveStrings() {
- printf("- GetLogicalDriveStrings:\n");
- char buffer[4096]; // сам буфер для строки
- DWORD bufSize = sizeof(buffer) - 1; // размер буфера, в который нужно записывать строку с дисками
+// Максимальное количество IP-адресов
+#define MAX_IP_ADDRESSES 10
+// Максимальная длина IP-адреса
+#define MAX_IP_ADDRESS_LENGTH 16
- GetLogicalDriveStrings(bufSize, buffer); // Получение списка логических дисков
- char *drive = buffer;
- while (*drive) { // перебор дисков
- printf("Диск: %s\n", drive);
- // следующий диск
- drive += strlen(drive) + 1;
- }
- return 0;
-}
-int getVolumeInformation() {
- printf("- GetVolumeInformation:\n");
- char volumeName[256];
- char fileSystemName[256];
- DWORD serialNumber;
- DWORD maxComponentLength;
- DWORD fileSystemFlags;
+typedef char * (*NAME)();
- // Получение информации о текущем диске
- GetVolumeInformation("C:\\", // указатель на строку, содержащую корневой каталог тома
- volumeName, // буфер, который получит имя тома
- sizeof(volumeName), // длина буфера для имени тома
- &serialNumber, // указатель на переменную, которая получит имя указанного тома
- &maxComponentLength, //
- &fileSystemFlags, //
- fileSystemName, // буфер для названия файловой системы
- sizeof(fileSystemName)); // размер буфера названия файловой системы
- printf("Имя тома: %s\n", volumeName);
- printf("Серийный номер: %lu\n", serialNumber);
- printf("Max Component Length: %lu\n", maxComponentLength);
- printf("Тип файловой системы: %s\n", fileSystemName);
- printf("File System Flags: %lu\n", fileSystemFlags);
- return 0;
-}
-
-// ---
-long getFileSize() {
- printf("- GetFileSize:\n");
- HANDLE hFile;
- DWORD fileSize;
- unsigned long structLargeInt;
- // Открытие файла
- hFile = CreateFile((LPCSTR) "../text.txt",
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
-
- // Получение размера файла
- structLargeInt = GetFileSize(hFile, NULL);
-
- // Закрытие файла
- CloseHandle(hFile);
-
- // Вывод размера файла
- printf("Размер файла: %lu байт\n", structLargeInt);
- return 0;
-}
-int findNextFile() {
- printf("- FindNextFile:\n");
- WIN32_FIND_DATA findData;
- HANDLE hFind;
- char path[MAX_PATH];
-
- // Задаем путь к директории, которую нужно просканировать
- strcpy(path, "..\\*");
-
- // Начинаем поиск первого файла/папки в директории
- hFind = FindFirstFile(path, &findData);
-
- // Перебираем все файлы и папки в директории
- do {
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
- printf("Папка: %s\n", findData.cFileName);
- } else {
- printf("\tФайл: %s\n", findData.cFileName);
- }
- } while (FindNextFile(hFind, &findData));
-
- // Закрытие дескриптора поиска
- FindClose(hFind);
-
- return 0;
-}
-int getWindowsDirectory() {
- printf("- GetWindowsDirectory:\n");
- char windowsDir[255]; // сюда запишутся символы пути
-
- GetWindowsDirectory(windowsDir, sizeof(windowsDir));
-
- printf("Виндосв папка тут: %s\n", windowsDir);
- return 0;
-}
-int compareFileTime() {
- printf("- CompareFileTime:\n");
- FILETIME fileTime1;
- FILETIME fileTime2;
-
- // первый файл
- HANDLE file1 = CreateFile((LPCSTR) "../text.txt",
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
-
- // время изменения первого файла
- GetFileTime(file1, NULL, NULL, &fileTime1);
-
- // закрываем первый файл
- CloseHandle(file1);
-
- // Открываем второй файл
- HANDLE file2 = CreateFile((LPCSTR) "../text2.txt",
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
- // Получаем время изменения второго файла
- GetFileTime(file2, NULL, NULL, &fileTime2);
-
- // Закрываем второй файл
- CloseHandle(file2);
-
- // Сравниваем время изменения файлов
- int comparisonResult = CompareFileTime(&fileTime1, &fileTime2);
-
- if (comparisonResult == 1) {
- printf("Файл 1 был изменен раньше файла 2\n");
- } else if (comparisonResult == -1) {
- printf("Файл 2 был изменен раньше файла 1\n");
- } else {
- printf("Время изменения файлов одинаково\n");
- }
-
- return 0;
-}
-
-// ---
-int setLocalTime() {
- printf("- SetLocalTime:\n");
- // Создание структуры SYSTEMTIME для установки времени
- SYSTEMTIME systemTime;
-
- // Заполнение структуры SYSTEMTIME данными текущего времени
- GetLocalTime(&systemTime);
- printf("\nДата и время ДО изменения: %02d-%02d-%d %02d:%02d:%02d\n",
- systemTime.wDay, systemTime.wMonth, systemTime.wYear,
- systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
-
- // Увеличение часового значения на 1
- if (systemTime.wHour < 23) {
- systemTime.wHour++;
- } else {
- systemTime.wHour = 0;
- }
-
- // Установка нового времени с использованием SetLocalTime
- SetLocalTime(&systemTime);
- printf("Время успешно изменено\n");
-
- printf("\nДата и время ПОСЛЕ изменения: %02d-%02d-%d %02d:%02d:%02d\n",
- systemTime.wDay, systemTime.wMonth, systemTime.wYear,
- systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
-
- return 0;
-}
-int setFileAttributes() {
-
- printf("- SetFileAttributes:\n");
-// Gуть к файлу
- LPCWSTR filePath = L"..\\text3.txt";
- // Сбрасываем атрибуты файла
- SetFileAttributes((LPCSTR) filePath, (DWORD) NULL);
- // Текущие атрибуты файла
- DWORD fileAttributes = GetFileAttributes((LPCSTR) filePath);
- printf("\tТекущие атрибуты файла ДО замены: ");
- if (fileAttributes & FILE_ATTRIBUTE_READONLY) {
- printf("\n- Read-only");
- }
- if (fileAttributes & FILE_ATTRIBUTE_HIDDEN) {
- printf("\n- Hidden");
- }
- if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
- printf("\n- Directory");
- }// и так далее для других атрибутов файла...
- printf("\n");
-
- // Устанавливаем атрибуты файла
- DWORD newFileAttributes = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY |fileAttributes;
- BOOL result = SetFileAttributes((LPCSTR) filePath, (DWORD) newFileAttributes);
-
- fileAttributes = GetFileAttributes((LPCSTR) filePath);
-
- printf("\tТекущие атрибуты файла ПОСЛЕ замены: ");
- if (fileAttributes & FILE_ATTRIBUTE_READONLY) {
- printf("\n- Read-only");
- }
- if (fileAttributes & FILE_ATTRIBUTE_HIDDEN) {
- printf("\n- Hidden");
- }
- if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
- printf("\n- Directory");
- }// и так далее для других атрибутов файла...
- printf("\n");
-
- return 0;
-}
-int createFile() {
- printf("- CreateFile:\n");
- HANDLE hFile;
- char* fileName = "example.txt";
-
- // Создание файла
- hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
- // Запись в файл
- char* data = "Hello, World!";
- DWORD bytesWritten;
- WriteFile(hFile, data, strlen(data), &bytesWritten, NULL);
-
- // Закрытие файла
- CloseHandle(hFile);
-
- // Повторное открытие файла
- hFile = CreateFile(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-
- // Чтение из файла
- const int bufferSize = 100;
- char buffer[bufferSize];
- DWORD bytesRead;
- if (!ReadFile(hFile, buffer, bufferSize, &bytesRead, NULL))
- {
- printf("Failed to read from file.\n");
- CloseHandle(hFile);
+int main(){
+ const HINSTANCE hinstanceDll = LoadLibrary("libbiblioteka.dll"); // динамическая загрузка библиотеки
+ if (hinstanceDll == NULL){
+ printf("Alarme obshibka\n");
return 1;
}
+ // получение функций из библиотеки
+ const NAME getIpAddresses = (NAME) GetProcAddress(hinstanceDll, "getIpAddresses");
- // Вывод содержимого файла
- printf("Содержимое файла: %.*s\n", bytesRead, buffer);
+ if (getIpAddresses != NULL){
+ char **ipAddresses = (char **) getIpAddresses();
+ if (ipAddresses == NULL) {
+ printf("Failed to retrieve IP addresses\n");
+ return 1;
+ }
- // Закрытие файла
- CloseHandle(hFile);
+ // Выводим IP-адреса
+ for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
+ printf("IP address %d: %s\n", i+1, ipAddresses[i]);
+ }
- return 0;
-}
-void copyFile(const char* sourceFile, const char* destinationFile) {
- printf("- CopyFile:\n");
+ // Освобождаем память
+ for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
+ free(ipAddresses[i]);
+ }
+ free(ipAddresses);
- FILE* source = fopen(sourceFile, "rb");
- FILE* destination = fopen(destinationFile, "wb");
-
- // Копируем содержимое файла
- char buffer[1024];
- size_t bytesRead;
- while ((bytesRead = fread(buffer, 1, sizeof(buffer), source)) > 0) {
- fwrite(buffer, 1, bytesRead, destination);
}
+ else {
+ printf("Not Find function");
+ }
+ const long result_2 = factorial(4);
- // Закрываем файлы
- fclose(source);
- fclose(destination);
-
- printf("Файл успешно скопирован.\n");
-}
-
-
-
-int main() {
- setlocale(LC_ALL, "Rus");
- printf("\n----------------------------\n");
- printf("\tИнформация о дисках:\n");
- // getLogicalDriveStrings();// + получение букв дисков
- // getVolumeInformation();// + получение информации о файловой системе выбранного логического диска
- printf("\n------------------------------------------\n");
- printf("\tИнформация о файлах и директориях:\n");
- // getFileSize();// + получает размер файла
- // findNextFile();// + поиск следующего файла в месте поиска
- // getWindowsDirectory();// + путь к основному каталогу виндовс
- // compareFileTime();// + определение какой из файлов более новый
- printf("\n----------------------------\n");
- printf("\tУправляющие функции:\n");
- // setLocalTime();// + установить текущую дату и время
- // setFileAttributes();// + установка файловых атрибутов
- // createFile();// создать/открыть файл
- const char* sourceFile = ".//text.txt";
- const char* destinationFile = ".//text33.txt";
- CopyFile(".//text.txt", ".//text3.txt", 0);// скопировать файл
-}
+ printf("Result 2: %d\n", result_2);
+ FreeLibrary(hinstanceDll);
+}
\ No newline at end of file
diff --git a/text.txt b/text.txt
deleted file mode 100644
index 6461503..0000000
--- a/text.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsanss
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-text.txttext.txttext.txt
-
-text.txttext.txttext.txttext.txtsss
-text.txttext.txttext.txttext.txt
-
-
-text.txttext.txttext.txt
-text.txtss
-text.txt
-text.txt
-text.txt
-text.txttexttext.txtss
\ No newline at end of file
diff --git a/text2.txt b/text2.txt
deleted file mode 100644
index 51762f3..0000000
--- a/text2.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsanss
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-;lkadsnf;lkjsd;cjsa;dijwaijfiaejfaiosjfs;lknv;lsan
-text.txttext.txttext.txt
-
-text.txttext.txttext.txttext.txt
-text.txttext.txttext.txttext.txt
-
-
-text.txttext.txttext.txt
-text.txt
-text.txt
-text.txt
-text.txt
-text.txttexttext.txtывыфвывыав
\ No newline at end of file
diff --git a/text3.txt b/text3.txt
deleted file mode 100644
index e69de29..0000000