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