Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pipe под linux 
V
    Опции темы
admsasha
Дата 8.1.2007, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Как я понял, через pipe можно сделать общение процесов. Но все примеры которые я видел работают только под windows
<windows.h>

Можете кинуть самый простой пример с именованным pipe, клиент+сервер под linux ?  smile 

Это сообщение отредактировал(а) admsasha - 8.1.2007, 08:16
PM MAIL WWW ICQ Jabber   Вверх
MAKCim
Дата 8.1.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Код

static void do_client(const char *path) {
    int fd = open(path, O_RDONLY);
    if (fd < 0)
        _exit(errno);
    do {
        /* work with FIFO for read */
    } while (1);
}

static void do_server(const char *path) {
    /* we must block here or ignore SIGPIPE */
    int fd = open(path, O_WRONLY);
    if (fd < 0)
        _exit(errno);
    do {
        /* work witch FIFO for write */
    } while (1);
}

static void do_work(const char *path, mode_t mode) {
    if (mkfifo(path, mode) < 0) {
        if (errno == -EEXIST) {
            do_client(path);
            return;
        }
        _exit(errno);
    }
    do_server(path);
}


Это сообщение отредактировал(а) MAKCim - 8.1.2007, 17:46


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
admsasha
Дата 8.1.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



читаю так
 
Код

       read(fd,line, 1024);
        printf("%s\n",line);

пишу так

Код

write(fd,string,1024);


на экране нечего нет... что не так делаю ?

Завершающий код какой нибуть нужно ставить в string ? 

P.S. Файл создается.

Это сообщение отредактировал(а) admsasha - 8.1.2007, 10:55
PM MAIL WWW ICQ Jabber   Вверх
bilbobagginz
Дата 8.1.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



http://www.linuxhq.com/guides/LPG/node7.html
(англ.)
с примерами


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
admsasha
Дата 8.1.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Цитата(bilbobagginz @  8.1.2007,  20:37 Найти цитируемый пост)
http://www.linuxhq.com/guides/LPG/node7.html
(англ.)
с примерами 


Большое тебе спасибо !!! нашел что искал. Точнее через pipe передал данные, теперь буду думать толи мне надо =))

Добавлено @ 14:11 
Код

/*****************************************************************************
 Excerpt from "Linux Programmer's Guide - Chapter 6"
 (C)opyright 1994-1995, Scott Burkett
 ***************************************************************************** 
 MODULE: fifoserver.c
 *****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

#include <linux/stat.h>

#define FIFO_FILE       "MYFIFO"

int main(void)
{
        FILE *fp;
        char readbuf[80];

        /* Create the FIFO if it does not exist */
        umask(0);
        mknod(FIFO_FILE, S_IFIFO|0666, 0);

        while(1)
        {
                fp = fopen(FIFO_FILE, "r");
                fgets(readbuf, 80, fp);
                printf("Received string: %s\n", readbuf);
                fclose(fp);
        }

        return(0);
}
Since a FIFO blocks by default, run the server in the background after you compile it: 


        $ fifoserver&
We will discuss a FIFO's blocking action in a moment. First, consider the following simple client frontend to our server: 


/*****************************************************************************
 Excerpt from "Linux Programmer's Guide - Chapter 6"
 (C)opyright 1994-1995, Scott Burkett
 ***************************************************************************** 
 MODULE: fifoclient.c
 *****************************************************************************/

#include <stdio.h>
#include <stdlib.h>

#define FIFO_FILE       "MYFIFO"

int main(int argc, char *argv[])
{
        FILE *fp;

        if ( argc != 2 ) {
                printf("USAGE: fifoclient [string]\n");
                exit(1);
        }

        if((fp = fopen(FIFO_FILE, "w")) == NULL) {
                perror("fopen");
                exit(1);
        }

        fputs(argv[1], fp);

        fclose(fp);
        return(0);
}



эм.. не всё так просто. 

1. Как сделать что бы client не ждал отправки если сервер я не включил, допустим отправил в "файл" и всё ?

2. Как сделать что бы сервер не ждал ввода, а проверил ввод и пошел дальше, проверил дальше по циклу ?
PM MAIL WWW ICQ Jabber   Вверх
GrayCardinal
Дата 8.1.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



admsasha, 
Ты меня конечно извини, но хочу заметить что есть такие "страшные" вещи, как :
1. man'ы
2. google.ru
3. opennet.ru
4. книжки (да, черт возьми, да smile ).
может стоит перестать их бояться ?  smile 


--------------------
PM MAIL WWW   Вверх
bsa
Дата 12.1.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



admsasha, открывай в неблокирующем режиме, а дальше юзай select...
PM   Вверх
GrayCardinal
Дата 12.1.2007, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



bsa, 
Ты забыл лекцию на пару суток про то что такое "select"  smile 


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 12.1.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

открывай в неблокирующем режиме

у него вроде как не сокеты


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bilbobagginz
Дата 12.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Цитата

у него вроде как не сокеты 

а разьве non-blocking I/O - только для сокетов ?



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
admsasha
Дата 12.1.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



bsa, Извеняюсь, но тему можно закрывать


Код

fp = open(FIFO_FILE,O_WRONLY|O_NDELAY );


и всё
PM MAIL WWW ICQ Jabber   Вверх
MAKCim
Дата 12.1.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

а разьве non-blocking I/O - только для сокетов ?

man 2 select (special note for Linux)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 20.1.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(MAKCim @ 12.1.2007,  17:29)
man 2 select (special note for Linux)

Цитата(man 2 select)
LINUX NOTES
The  Linux pselect() system call modifies its timeout argument.  However, the glibc wrap-
per function hides this behaviour by using a local variable for the timeout argument that
is  passed  to  the  system call.  Thus, the glibc pselect() function does not modify its
timeout argument; this is the behaviour required by POSIX.1-2001.
.....
Under  Linux,  select() may report a socket file descriptor as "ready for reading", while
nevertheless a subsequent read blocks. This  could  for  example  happen  when  data  has
arrived but upon examination has wrong checksum and is discarded. There may be other cir-
cumstances in which a file descriptor is spuriously reported as ready.  Thus  it  may  be
safer to use O_NONBLOCK on sockets that should not block.
Только какое это отношение имеет к pipe и неблокирующему IO?

Это сообщение отредактировал(а) bsa - 20.1.2007, 20:52
PM   Вверх
MAKCim
Дата 20.1.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



bsa, 
извиняюсь, не Linux notes
а BUGS (последний абзац)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 20.1.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Я нашел, но там про сокеты, а не пайпы smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.