![]() |
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.
|
|
google unix.com
|
|||||||
| Fórumok | Regisztráció | Fórum Szabályok | Linkek | Albumok | GYIK | Tagok listája | Naptár | Keres | Mai hozzászólások | Megjelöl Fórumok Olvas |
| 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 |
![]() |
|
|
LinkBack | Téma eszközök | Keresés a téma | Rate Thread | Megjelenítési módok |
|
|
|
||||
|
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. |
|
||||
|
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;
}
De azt hiszem, jól szemlélteti az a pont. |
|
||||
|
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 |
|
|||||
|
A POSIX.1-2008 write () , errno úgy van beállítva, hogy EPIPE és SIGPIPE jelzést küld a hívó szálat.
|
![]() |
| Könyvjelzõk |
| Téma eszközök | Keresés a téma |
| Megjelenítési módok | Rate this thread |
|
|