
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"