diff --git a/.idea/modules.xml b/.idea/modules.xml
index 5831729..e63d5f2 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 68efe60..9c97d58 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.26)
-project(untitled C)
+project(untitled1 C)
set(CMAKE_C_STANDARD 11)
-add_executable(untitled main.c)
+add_executable(untitled1 main.c
+)
diff --git a/main.c b/main.c
index bdeaff4..89fc065 100644
--- a/main.c
+++ b/main.c
@@ -1,302 +1,94 @@
+
#include
#include
-#include
-int getLogicalDriveStrings() {
- printf("- GetLogicalDriveStrings:\n");
- char buffer[4096]; //
- DWORD bufSize = sizeof(buffer) - 1; // ,
+int main() {
+ HANDLE hComm; // Дескриптор порта
+ char *portName = "COM7"; // Имя порта
+ char *message = "Hello, World!"; // Сообщение для передачи
- 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;
+ // Открытие порта
+ hComm = CreateFile(portName, // Имя порта
+ GENERIC_READ | GENERIC_WRITE, // Доступы для чтения и записи
+ 0, // Семафор
+ NULL, // Атрибуты безопасности
+ OPEN_EXISTING, // Открытие существующего
+ FILE_FLAG_OVERLAPPED, // Флаги для асинхронной работы
+ NULL); // Дескриптор безопасности
- //
- 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);
+ // Если не удалось открыть порт
+ if (hComm == INVALID_HANDLE_VALUE) {
+ // - вывести ошибку и выйти из программы
+ printf("Error when opening port\n");
return 1;
}
- //
- printf(" : %.*s\n", bytesRead, buffer);
+ // Настройка параметров порта
+ DCB dcbSerialParams = {0}; // Структура хранения параметров порта
+ dcbSerialParams.DCBlength = sizeof(dcbSerialParams); // Размер структуры
+ // Если не удалось получить параметры порта
+ if (!GetCommState(hComm, &dcbSerialParams)) {
+ // - вывести ошибку, закрыть дескриптор порта и выйти из программы
+ printf("Error when getting port state\n");
+ CloseHandle(hComm);
+ return 1;
+ }
+ // Установка параметров порта
+ dcbSerialParams.BaudRate = CBR_9600; // Скорость передачи данных
+ dcbSerialParams.ByteSize = 8; // Длина символа
+ dcbSerialParams.StopBits = ONESTOPBIT; // Количество стоповых бит (1)
+ dcbSerialParams.Parity = NOPARITY; // Четность (отсутствует)
- //
- CloseHandle(hFile);
-
- return 0;
-}
-void copyFile(const char* sourceFile, const char* destinationFile) {
- printf("- CopyFile:\n");
-
- 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);
+ // Если не удалось установить параметры порта
+ if (!SetCommState(hComm, &dcbSerialParams)) {
+ // - вывести ошибку, закрыть дескриптор порта и выйти из программы
+ printf("Error when setting port state\n");
+ CloseHandle(hComm);
+ return 1;
}
- //
- fclose(source);
- fclose(destination);
+ DWORD bytesWritten; // Количество переданных байт
+ OVERLAPPED overlapped = {0}; // Передача данных в асинхронном режиме
+ overlapped.hEvent = CreateEvent(NULL, // Определяет, может ли созданный объект события быть унаследован в дочерних процессах. При передаче значения NULL объект не может быть унаследован.
+ TRUE, // Будет ли событие установлено в несигнальное состояние после срабатывания (TRUE) или автоматически переходит в несигнальное состояние после ожидания одним потоком (FALSE).
+ FALSE, // Будет ли объект события создан в несигнальном (сброшенном) состоянии (FALSE) или в сигнальном состоянии (TRUE). вызова функции.
+ NULL); // Указатель на строку, содержащую имя объекта события. Если имя является уникальным, можно использовать значение NULL.
- printf(" .\n");
-}
+ printf("Waiting to write...\n");
+ Sleep(2000);
+ // Асинхронная передача сообщения
+ if (!WriteFile(hComm, // Дескриптор порта
+ message, // Сообщение для передачи
+ strlen(message), // Размер сообщения
+ NULL, // Количество переданных байт (NULL для асинхронной работы)
+ &overlapped)) // Передача данных в асинхронном режиме
+ {
+ // Если не удалось асинхронно записать данные
+ if (GetLastError() != ERROR_IO_PENDING) {
+ printf("Error when writing to port\n");
+ CloseHandle(hComm);
+ return 1;
+ }
+ printf("Waiting to get result...\n");
+ Sleep(2000);
-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);//
-}
+ // Ожидание завершения асинхронной операции
+ if (!GetOverlappedResult(hComm, &overlapped, &bytesWritten, TRUE)) {
+ printf("Error when getting overlapped result\n");
+ CloseHandle(hComm);
+ return 1;
+ }
+ }
+ // Если сообщение было передано полностью
+ else {
+ bytesWritten = strlen(message);
+ }
+ printf("Message sent. Byte written: %lu\n", bytesWritten);
+
+ // Закрытие порта
+ CloseHandle(hComm);
+
+ return 0;
+}
\ 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