The UNIX and Linux Forums  
Hello and Welcome-tól az Egyesült Államokat, hogy az UNIX és Linux Forums? Köszönjük, hogy meglátogatta és csatlakozik Globális Közösség.

Go Back   A UNIX és Linux Forums > Top Fórumok > A UNIX a fejlett és szakértői Felhasználók
.
google unix.com



A UNIX a fejlett és szakértői Felhasználók Szakértő-to-szakértő. Tudjon fejlett UNIX, UNIX parancsokat, a Linux operációs rendszereket, Rendszeradminisztráció, programozás, a Shell, a Shell Scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Több, UNIX és Linux fórum témák Ön által talált Hasznos
Szál Thread Starter Fórum Válaszok Utolsó hozzászólás
Doubts a FIFO Akshay A UNIX a dummies Kérdések és válaszok 0 06-06-2008 08:56 AM
hogyan kell használni fifo atticus Magas szintű Programozás 3 06-05-2006 11:15 AM
FIFO kérdés runawayNinja Magas szintű Programozás 1 04-29-2004 04:10 PM
FIFO át NFS saabir A UNIX a fejlett és szakértői Felhasználók 2 08-06-2003 09:03 AM
Pipe & fifo .... M3xican Magas szintű Programozás 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 Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 06-30-2009
jackhab jackhab is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2009
Hozzászólások: 1
Lehet FIFO file overfow?

Szeretnék kimenet tuskózó információk FIFO fájlt. Saját alkalmazás futtatható a hónapban. A kérdésem az, hogy mi történik a FIFO fájlt, amikor az egyik oldalon folyamatosan írásban, és senki sem a másik oldalon az olvasáskor ez?
Will végül is ez megragadt, túlfolyó, reset, majd veszi az összes OS-RAM?

Köszönöm.
  #2 (permalink)  
Old 06-30-2009
mgessner mgessner is offline
Regisztrált felhasználó
  
 

Join Date: Oct 2007
Hozzászólások: 50
Nos, akkor legyen egy nagyon egyszerű vizsgálat.

Hozd létre a FIFO w / mkfifo. Hozzon létre két folyamat, az író és az olvasó.

Nyissuk meg a FIFO az írás, amely a blokk, mert nincs olvasó. Amikor unblocks, írjon stderr azt, hogy ébren, majd rendszeresen írni néhány byte-e, és a napló minden egyes írni.

Fuss az olvasó folyamatban van aludni egy kicsit, és azt olvastam, mondjuk 10-szer, a dömping, amit olvas. Akkor azt a szoros és fifo megszűnik.

Mit kell látni, hogy Steven APUE az, hogy a le kellene írni SIGPIPE is keletkezett.

Íme egy példa:
Kód:
#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;
}
Én vezetem ezt a két rendszert, és biztos vagyok benne, hogy vannak olyan kérdések is (például az egyik nem használhatja fprintf a jelző kezelője ...).

De azt hiszem, jól szemlélteti az a pont.
  #3 (permalink)  
Old 06-30-2009
Jim McNAMARA jim mcnamara is online now Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.762
FIFO's / csövek

Azt is meg kell tudni PIPE_BUF, a garantált minimális számú bájt lehet írva. Implementations változhat ezen.

Nincsenek részleges írja, hogy a cső, ha a kért méret a puffer nagyobb, mint a rendelkezésre álló helyet. Ehelyett -1 visszaküldeni írnod errno állítva EAGAIN.

Végül, a nagy teljesítményű üzenetküldő vagy IPC, csövek / FIFOs nem jó választás.
Mivel nincs garancia a Atomicity több olvasói, egy cső lehet kérdéseket.

Last edited by jim McNAMARA; 06/30/2009 at 11:17 AM.. Reason: helyesírás
  #4 (permalink)  
Old 06-30-2009
fpmurphy's Avatar
fpmurphy fpmurphy is offline Forum Staff  
Moderátor
  
 

Join Date: Dec 2003
Helyszín: Florida
Hozzászólások: 1.927
A POSIX.1-2008 write () , errno úgy van beállítva, hogy EPIPE és SIGPIPE jelzést küld a hívó szálat.
  #5 (permalink)  
Old 06-30-2009
Jim McNAMARA jim mcnamara is online now Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.762
Én hivatkozva Marc Rochkind 'Advanced UNIX Programming "sec 6.2.2. És POSIX - Feltételezem nonblocking.

Kód:
If O_NDELAY or O_NONBLOCK is set, the write returns -1 and
              sets errno to [EAGAIN].
Én nem egyértelmű.
Reply

Könyvjelzõk

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 09:27 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0