Межпроцессного взаимодействия IPC Linux

  Межпроцессного взаимодействия (IPC) относится к распространению и обмену данными между различными процессами, каждый из которых имеет различный процесс для каждого адресного пространства пользователя (виртуального адресного пространства), процесс любой глобальной переменной в другом процессе не мог видеть, так для обмена данные между процессами могут быть ядром, открыть буфер в ядре, процесс копирования данных из пользовательского пространства в буфер ядра, а затем скопировать данные из буфера ядра процесса в, чтобы иметь пространство пользователя, предоставляемое ядро это называется механизмом межпроцессного взаимодействия; механизм под Linux, МПК разделена на: трубы, семафоры, совместно используемой памяти, очереди сообщений, розетки;

Во-первых, трубопровод

1 мысль: Вызов функции трубы в ядре будет открыть трубу, называемую буфер файл, который содержит чтение конца и конец записи, межпроцессное взаимодействие через буферную зону;

2 Особенности: половина формы, родитель и ребенок, поставляется с механизмом синхронизации;

Использование 3: Создание родителя требует трубопровода трубы, чтобы получить два дескриптора файла FD [2], Fd [0] -readable, Fd [1] можно записать, раскошелиться дочерний процесс родительского процесса, дочерний процесс также описан в двух, чтобы дать фу Fd [2]; родитель закрытие конца чтения FD [0], ребенок закрывает торцевые записи FD [1], так что родительский процесс к трубе для записи данных, дочерний процесс, чтобы считывать данные из трубы, труба представляет собой круговую очередь внедрено , данные записи с конца притока, оттока из конца чтения; следующим образом:

(1) читать трубопровод, если трубопровод пустые блоки до конца записи данных записи на запись в трубопроводе; написать сторона закрыта, если возвращается 0;

(2) написать трубопровод, если трубопровод полон, не блокируя до конца чтения трубопровода считывания данных внутренних удален; конец закрыт, если ошибка чтения возвращается -1, генерирует сигнал SIGPIPE;

 4 кода осуществляется следующим образом:

1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include < строка .h>
 4  
5  #define ABCDE "ABCDE"
 6  #define FGHIJ "FGHIJ"
 7  
8  INT основных ( INT ARGC, символ * ARGV [])
 9  {
 10      INT    FD [ 2 ] = { 0 }, размер = 0 ;
11      pid_t PID = - 1 ;
12      символ   BUF [ 256 ] = { 0 };
13 
14 ,      если (трубы (FD)) // 1 труба 
15      {
 16          PError ( " трубы " );
17          возвращение  1 ;
18      }
 19      PID = вилка (); // 2 вилки 
20 ,      если (PID < 0 )
 21      {
 22          PError ( " вилка " );
23          возврата  2 ;
24      }
 25      еще  если (PID == 0 ) //3 ребенок записи FD [1] 
26      {
 27          Е ( " ребенок старт \ п " );
28          близко (FD [ 0 ]);
29          размер = запись (FD [ 1 ], ABCDE, 5 );
30          Е ( " ребенок, тзд =% s, размер =% d \ п " , ABCDE, размер);
31          // сна (1); 
32          размер = запись (FD [ 1 ], FGHIJ, 5 );
33          Е ( " ребенок, тзд =% s, размер =% d \ п " , FGHIJ, размер);
34      }
35      еще  // 3 отец прочитал Fd [0] 
36      {
 37          Е ( " отец начать \ N " );
38          близко (FD [ 1 ]); 
39          // сон (1); 
40          размера = чтение (FD [ 0 ], ЬиЙ, 256 );  // блок , пока ребенок не записи Fd [1] 
41          Е ( " отец, тзд =% s, размер =% d \ N " , BUF, размер);
42          MemSet (BUF, 0 , SizeOf (BUF));
43          размера = чтение (FD [ 0], ЬиЙ, 256 );  // блок , пока ребенок не записи Fd [1] 
44          Е ( " отец, тзд =% s, размер =% d \ N " , BUF, размер);
45      }
 46      возврата  0 ;
47 }
Просмотр кода

II.

рекомендация

отwww.cnblogs.com/bo1990/p/11401717.html