Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы 60-79.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
28.11 Кб
Скачать

60.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

BOOL CreateDirectory(

  LPCTSTR lpPathName,                         // directory name

  LPSECURITY_ATTRIBUTES lpSecurityAttributes  // SD

);

 

HANDLE CreateFile(

  LPCTSTR lpFileName,                         // file name

  DWORD dwDesiredAccess,                      // access mode

  DWORD dwShareMode,                          // share mode

  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD

  DWORD dwCreationDisposition,                // how to create

  DWORD dwFlagsAndAttributes,                 // file attributes

  HANDLE hTemplateFile                        // handle to template file

);

61. Chdir, fchdir - функции смены рабочего каталога

НАЗВАНИЕ chdir, fchdir - функции смены рабочего каталога СИНТАКСИС #include int chdir(const char *path); int fchdir(int fd); ОПИСАНИЕ chdir устанавливает текущий каталог, указанный в аргументе path. fchdir работает так же, как chdir, только в качестве аргумента используется описатель файла.

62. HANDLE FindFirstFile

(

LPCTSTR lpFileName, // какой файл ищем можно указывать маску *, ?

LPWIN32_FIND_DATA lpFindFileData // указатель на структуру с информацией

);

В случае ошибке вернет INVALID_HANDLE_VALUE. Для продолжения поиска используется функция:

BOOL FindNextFile

(

HANDLE hFindFile, // указатель на поиск

LPWIN32_FIND_DATA lpFindFileData // указатель на структуру с информацией

);

А теперь пробуем все вместе:

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

void main()

{

WIN32_FIND_DATA FindFileData;

HANDLE hf;

hf=FindFirstFile("c:\\*", &FindFileData);

if (hf!=INVALID_HANDLE_VALUE)

{

do

{

cout << FindFileData.cFileName << endl;

}

while (FindNextFile(hf,&FindFileData)!=0);

FindClose(hf);

}

63. FindClose (hSearch); // заканчиваем поиск

64. Для создания сервера почтового слота используется функция:

HANDLE CreateMailslot

{

LPCTSTR lpName, // имя

DWORD nMaxMessageSize, // максимальный размер

DWORD lReadTimeout, // интервал-тайм аута чтения

LPSECURITY_ATTRIBUTES lpSecurityAttributes // информация о безопасности

);

При успешном выполнении мы получим указатель при неуспешном INVALID_HANDLE_VALUE. Обратите внимание на то, что имя должно быть уникальное. Пробуем:

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

Void main()

{

HANDLE hsl=NULL;

hsl= CreateMailslot("\\\\.\\mailslot\\hello",0,MAILSLOT_WAIT_FOREVER,NULL);

if (hsl!=INVALID_HANDLE_VALUE)

{

cout << "Ok Created mailslot" << endl;

После создания можно установить операцию чтения. Так как мы указали что ожидание будет до получения информации программа замрет.

if (hsl!=INVALID_HANDLE_VALUE)

{

cout << "Ok Created mailslot" << endl;

char buffer[255];

DWORD nBytesRead;

if (ReadFile(hsl, &buffer, 255, &nBytesRead, NULL)!=0)

{

cout << "Ok read" << endl;

cout << buffer << endl;

}

}

int i;

cin >> i;

65-

66. Синтаксис вызова функции создания канала: pipe(fdptr);

где fdptr - указатель на массив из двух целых переменных, в котором будут храниться два дескриптора файла для чтения из канала и для записи в канал. Поскольку ядро реализует каналы внутри файловой системы и поскольку канал не существует до того, как его будут использовать, ядро должно при создании канала назначить ему индекс. Оно также назначает для канала пару пользовательских дескрипторов и соответствующие им записи в таблице файлов: один из дескрипторов для чтения из канала, а другой для записи в канал. Поскольку ядро пользуется таблицей файлов, интерфейс для вызова функций read, write и др. согласуется с интерфейсом для обычных файлов. В результате процессам нет надобности знать, ведут ли они чтение или запись в обычный файл или в канал.

Как видите для создание канала надо вызвать функцию CreateNamedPipe, а для клиента создать файл указав сервер Server. Вы должны указывать свой сервер. То есть его имя в домене. А имя \\pipe\\ipctest должно совпадать и в клиенте и в сервере. Это имя канала.

67. Пункт Open Named Pipes может быть и не такой. Мы с Вами создадим две простые консольные программы, которые будут эмулировать клиента и сервера. Итак сервер:

// CreateNamedPipe.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"