Реферат Курсовая Конспект
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. Проверьте Ваш каталог. Удалите все оставшиеся там именованные каналы.
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Межпроцессное взаимодействие в ОС Linux"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Cat > fifo1
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов