Взаимодействие процессов в UNIX презентация

IPC PIPE Канал – однонаправленная передача данных между двумя процессами. Low level Piping int pipe(int fd[2]); int filedes[2]={outdes,indes}; Formatted Piping FILE *popen(char *command, char *type); pclose(FILE *stream);

Слайд 1Взаимодействие процессов в UNIX


Слайд 2IPC PIPE
Канал – однонаправленная передача данных между двумя процессами.

Low level

Piping
int pipe(int fd[2]);
int filedes[2]={outdes,indes};
Formatted Piping
FILE *popen(char *command, char *type);
pclose(FILE *stream);

Слайд 3Low-level piping







stdin = 0
stdout = 1
stderr = 2


























1. pipe(fd)
2. fork()
3. close(0)
4.

dup2(fd[0],0)
5. close(fd[0])
6. close(fd[1])
7. exec*(“more”)

1. close(1)
2. dup2(fd[1],1)
3. close(fd[0])
4. close(fd[1])
5. exec*(“ls -la”)

>>PIPE>>

fd[0] = 4

fd[1] = 6

0 = stdin

1 = stdout

2 = stderr

4 = fd[0]

6 = fd[1]


Слайд 4FIFO
int mknod(char *pathname, int mode, int dev);
pathname – имя FIFO
mode –

флаг S_IFIFO, а также флаги владения, прав доступа и т.д.
dev – игнорируется

Слайд 5При чтении меньшего числа байт, чем есть в канале, остаток сохраняется
При

чтении большего числа байт, чем есть в канале, возвращается доступное число байт
Если канал пуст и ни один процесс не открыл его на запись, будет возвращено 0 байт. Если какой-либо процесс открыл канал на запись, то read будет переведен в состояние ожидания (если канал не работает в режиме NO_DELAY).
Запись числа байт, меньше емкости канала гарантировано атомарно.
При записи числа байт, больше емкости канала, write блокируется, атомарность не гарантируется

Каналы


Слайд 6IPC FIFO
mknod(“myfifo”, S_IFIFO | 0666, 0);
open(“myfifo”, O_RDONLY);
open(“myfifo”, O_WRONLY);
read(handle, buff, MAXBUFF);
write(handle, “Hello,

world!”);
close(handle);
unlink(“myfifo”);

Слайд 7Взаимодействие потоков в Win32


Слайд 8Unnamed pipes Неименованные каналы
Однонаправленный локальный механизм взаимодействия
BOOL CreatePipe(
PHANDLE phRead,
PHANDLE phWrite,

LPSECURITY_ATTRIBUTES lpsa,
DWORD cbPipe );

Слайд 9Named pipes Именованные каналы
Двунаправленный механизм взаимодействия, может использоваться локально и удаленно
HANDLE CreateNamedPipe(

LPCTSTR lpszPipeName,
DWORD fdwOpenMode,
DWORD fdwPipMode,
DWORD nMaxInstances,
DWORD cbOutBuf,
DWORD cbInBuf,
DWORD dwTimeOut,
LPSECURITY_ATTRIBUTES lpsa );

Слайд 10Named pipes Именованные каналы
m_hPipe = ::CreateNamedPipe (
"\\\\.\\pipe\\ipcdemo", // Имя канала
PIPE_ACCESS_OUTBOUND,

// Доступ только для записи
PIPE_TYPE_BYTE | PIPE_NOWAIT, // Запись байтов, без ожидания
1, // По одному экземпляру за один раз
0, // Размер выходного буфера (байт)
0, // Размер входного буфера (байт)
0, // Время ожидания (мс)
NULL // Использовать дескриптор безопасности
// по умолчанию
);

Слайд 11Named pipes Именованные каналы
CString string = "\\\\" + strServerName + "\\pipe\\ipcdemo";

hPipe =

CreateFile(
string,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика