The UNIX and Linux Forums  


Go Back   В UNIX и Linux Форумы > Топ форумы > UNIX перспективных И опытных пользователей
.
Google unix.com



UNIX перспективных И опытных пользователей Эксперт-на-экспертов. Узнайте современные UNIX, UNIX команды, Linux, операционные системы, системы управления, программирование, Shell, Shell скриптов, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Сомнения по FIFO Akshay UNIX для чайников Вопросы И Ответы 0 06-06-2008 08:56 AM
Как использовать FIFO atticus Программирования высокого уровня 3 06-05-2006 11:15 AM
FIFO вопрос runawayNinja Программирования высокого уровня 1 04-29-2004 04:10 PM
FIFO над NFS saabir UNIX перспективных И опытных пользователей 2 08-06-2003 09:03 AM
Труба И FIFO .... M3xican Программирования высокого уровня 4 07-20-2002 08:22 AM

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 06-30-2009
jackhab jackhab is offline
Зарегистрированный пользователь
  
 

Регистрация: июнь 2009
Сообщений: 1
Можно FIFO файл overfow?

Я хочу для вывода информации в журнале FIFO файл. Моя заявка может работать в течение нескольких месяцев. Мой вопрос, что происходит с FIFO файл, когда есть одна сторона постоянно письменной форме, и никто на другой стороне от этого чтения?
Будет ли она в конечном итоге застрял, переполнения, сброса, будет ли он принимать все ОС RAM?

Спасибо.
Old 06-30-2009
mgessner mgessner is offline
Зарегистрированный пользователь
  
 

Регистрация: Oct 2007
Сообщений: 50
Ну, вы могли бы разработать тест довольно просто.

Создание FIFO ж / mkfifo. Создание двух процессов, писатель и читатель.

Откройте FIFO для записи, которые будут блокировать, поскольку нет читателя. Когда он unblocks, напишите STDERR что просыпаются, а затем периодически пишут некоторые байты на нее, и каждый журнал писать.

Запуск читатель процесса, его сон немного, и его прочитать, скажем, в 10 раз, что это захоронение читает. Затем он должен закрыть FIFO и прекращать.

Что вы должны увидеть, по Стивенс APUE заключается в том, что записи должны вызывать SIGPIPE, которые будут созданы.

Вот пример:

Код:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>

int sigpipe_caught = 0;

#define TESTLOG(s) testlog(__FUNCTION__, s)

void testlog (const char *who, const char *msg)
{
  fprintf (stderr, "%s: %s\n", who, msg);
}

void writer (void)
{
  int f;
  int value = 0;
  int err;
  int done = 0;

  TESTLOG ("starting");
  if ((f = open ("fifo", O_WRONLY)) != -1)
  {
    TESTLOG ("opened fifo");

    while (done <= 0)
    {
      char buf[64];
      err = write (f, &value, sizeof value);

      if (sizeof value == err)
      {
        sprintf (buf, "wrote %d", value);
        TESTLOG (buf);
        value++;
      }
      else
      {
        sprintf (buf, "err = %d", err);
        TESTLOG (buf);
        sprintf (buf, "sigpipe_caught = %d", sigpipe_caught);
        TESTLOG (buf);
        done++;
      }

      TESTLOG ("sleeping");
      sleep (1);
    }

    close (f);
    TESTLOG ("closed fifo");
  }
}

void reader (void)
{
  int f;
  int i;
  int value;
  int err;

  TESTLOG ("sleeping 2");
  sleep (2);
  TESTLOG ("awake");

  if ((f = open ("fifo", O_RDONLY)) != -1)
  {
    TESTLOG ("opened fifo");

    for (i = 0; i < 10; i++)
    {
      char buf[64];

      err = read (f, &value, sizeof value);
      if (sizeof value == err)
      {
        sprintf (buf, "read %d", value);
        TESTLOG (buf);
      }
      else
      {
        sprintf (buf, "err = %d", err);
        TESTLOG (buf);
      }
    }

    TESTLOG ("closing fifo");
    close (f);
  }
  else
  {
    TESTLOG ("failed to open fifo");
  }
}

void sigpipe (int a)
{
  TESTLOG ("caught SIGPIPE");
  sigpipe_caught = 1;
}

int main (void)
{
  signal (SIGPIPE, sigpipe);

  if (fork())
    writer();
  else
    reader();

  return 0;
}

Я запускать на нескольких системах, и я уверен, что Существуют проблемы с ней (например, нельзя использовать fprintf из обработчика сигнала ...).

Но я думаю, он показывает точку.
Old 06-30-2009
Джим Макнамара jim mcnamara is offline Forum Staff  
...@...
  
 

Регистрация: Февраль 2004
Местонахождение: Н. М.
Сообщения: 5789
FIFO в / трубы

Вы также должны знать о PIPE_BUF, гарантированное минимальное количество байт, которые могут быть написаны. Implementations различаются по этому вопросу.

Есть не частичный пишет в трубу, когда запрашиваемый размер буфера больше свободного пространства. Вместо -1 возвращается писать errno установлен в EAGAIN.

И наконец, для высокопроизводительных сообщений или МПК, трубы / FIFOs не большой выбор.
Поскольку нет никаких гарантий атомарность, многочисленные читатели на одной трубы могут иметь проблемы.

Последний раз редактировалось: Джим Макнамара; на 06-30-2009 11:17 AM.. Основание: заклинание
Old 06-30-2009
fpmurphy's Avatar
fpmurphy fpmurphy is offline Forum Staff  
Модератор
  
 

Регистрация: Декабрь 2003
Откуда: Florida
Сообщения: 1934
Согласно POSIX.1-2008 записи () , errno установлен в EPIPE и SIGPIPE сигнал посылается с призывом нить.
Old 06-30-2009
Джим Макнамара jim mcnamara is offline Forum Staff  
...@...
  
 

Регистрация: Февраль 2004
Местонахождение: Н. М.
Сообщения: 5789
Я ссылки Марк Rochkind "Дополнительно UNIX Программирование 'сек 6.2.2. И POSIX - Я полагаю, nonblocking.


Код:
If O_NDELAY or O_NONBLOCK is set, the write returns -1 and
              sets errno to [EAGAIN].

Я была не ясна.
Reply

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 11:02 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0