рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Cat > fifo1

Cat > fifo1 - раздел Компьютеры, Межпроцессное взаимодействие в ОС Linux Затем Набирайте Произвольные Строки, Завершите Ввод Символом Конца Файла ...

Затем набирайте произвольные строки, завершите ввод символом конца файла CTRL-d. Что будет выведено в первом окне?

В программе именованный канал создается при помощи системного вызова mknod() или библиотечной функции mkfifo(), которая, в свою очередь, использует mknod().

В этой части лабораторной работы необходимо создать и проверить несколько вариантов клиент/серверной системы, основанной на именованном канале. Предполагается, что сервер создает именованный канал и пытается читать из него данные. Клиент запускается после старта сервера и записывает в канал некоторые данные для сервера, затем клиент завершается. После чтения данных из канала сервер распечатывает их и также завершается.

Задание3.

3.1. Наберите и выполните программы server.c и client.c(их тексты имеются в папке Methodic/…):

 

/* server.c SERVER PROGRAM */

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

 

#define FIFONAME "..." /* Some unique name of pipe must be specified here */

 

int main(void)

{

int n, fd;

char buf[1024]; /* A buffer for reading and writing the pipe */

 

printf (“SERVER STARTS…n”);

 

/* Remove any previously created pipe with this name if any. */

unlink(FIFONAME);

 

/* Create a named pipe with the permissions to write and read for all. */

if (mkfifo(FIFONAME, 0666) < 0) {

perror("mkfifo problem in server");

exit(1);

}

 

/* Make sure that the permission flag is really 0666 */

if (chmod(FIFONAME, 0666) < 0)

{perror("chmod problem in server"); exit(1);}

 

/* Open the created named pipe for reading. */

if ((fd = open(FIFONAME, O_RDONLY)) < 0) {

perror("open problem in server");

exit(1);

}

 

/*

* Read from the named pipe until end-of-file,

* and print what we get on the standard output.

*/

while ((n = read(fd, buf, sizeof(buf))) > 0)

write(1, buf, n);

 

close(fd);

printf (“SERVER TERMINATED…n”);

exit(0);

}

 

 

/* client.c CLIENT PROGRAM*/

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

 

#define FIFONAME "..." /* The same name as in server must be specified here */

 

int main(void)

{

int n, fd;

char buf[1024]; /* Buffer for reading */

 

printf (“CLIENT STARTS…n”);

 

/* Open existing named pipe for writing. It was

* created by the server already.

*/

if ((fd = open(FIFONAME, O_WRONLY)) < 0) {

perror("open problem in client");

exit(1);

}

 

/*

* Read any text from standard input, and copy

* this text data to the named pipe. The text must be finished by Ctrl/d

*/

while ((n = read(0, buf, sizeof(buf))) > 0)

write(fd, buf, n);

 

printf (“CLIENT TERMINATED…n”);

close(fd);

exit(0);

}

 

3.2. Запустите серверный процесс (без параметров в командной строке) в фоновом режиме. Вы увидите соответствующий идентификатор процесса. Проверьте Ваш каталог, чтобы убедиться, что именованный канал создан.

3.3. Запустите клиентский процесс без параметров в командной строке. Введите с клавиатуры несколько строк какого-либо сообщения и завершите его символом конца файла, Ctrl-d. Запишите в отчет вид экрана.

3.4. Повторите задание 3.2. Но теперь запустите сервер, как обычно, на переднем плане.

3.5. Запустите вторую копию оболочки. Теперь Вы будете иметь два виртуальных терминала: один для сервера и другой для клиента. Расположите оба окна так, чтобы они одновременно были видны на экране. Со второго терминала запустите клиентский процесс и введите несколько строк с клавиатуры (завершив их символом Ctrl-d). Запишите в отчет вид обоих экранов.

3.6. Повторите задания 3.4 и 3.5. Но теперь запустите клиентский процесс таким образом, чтобы он считывал информацию из какого-либо текстового файла (например, из файла с исходным текстом клиентской программы). Что Вы увидите на экране серверного терминала?

3.7. Модифицируйте обе программы (для сервера и клиента) так, чтобы имя канала можно было задавать в командной строке (вместо директивы #define FIFONAME). Дайте программам имена server2.c и client2.c. Создайте исполняемый файл для модифицированной программы и повторите задания 3.4, 3.5 и 3.6.

3.8. В client2.c замените цикл while фрагментом, который записывает какое-нибудь постоянное сообщение в buf (вместо чтения текста с клавиатуры). Дайте программе имя client3.c. Для client3.c и server2.c повторите задания 3.4 и 3.5.

3.9. Проверьте действие режима O_NONBLOCK (или O_NDELAY), указывая его при открытии канала. Запишите в отчет Ваши выводы.

3.10. Проверьте Ваш каталог. Удалите все оставшиеся там именованные каналы.

– Конец работы –

Эта тема принадлежит разделу:

Межпроцессное взаимодействие в ОС Linux

На сайте allrefs.net читайте: "Межпроцессное взаимодействие в ОС Linux"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Cat > fifo1

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Межпроцессное взаимодействие в ОС Linux
Цель работы: научиться использовать каналы и именованные каналы для межпроцессного взаимодействия в ОС Linux.   I. Каналы (unnamed pipes)

Ls -l /home/student | sort
где "|" - символ операции канала в оболочке.     Задание 1.

Ls -l /home/student | sort
1.3. Замените в исходном тексте программы оператор (дайте этой программе имя pipework1.c) execlp ("ls", "ls", "-l",

Вопросы к части I
1. Для чего предназначены неименованные каналы? 2. Объясните параметры системного вызова pipe(). 3. Что такое входной и выходной конец канала? 4. Как в п

Вопросы к части II
1. В чем отличие именованных каналов от неименованных? 2. Как создать в программе именованный канал? 3. Каково действие режима O_NONBLOCK, указываемого при открыт

Источники информации
1. Стивенс У. UNIX: взаимодействие процессов. - СПб: Питер, 2003. (Глава 4). 2. Митчел М., Оулдем Дж., Самьюэл А. Программирование для Linux. Профессиональный подход. - М.: Издательский до

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги