Pipe Törött, FIFO fájl

szavazat
45

Próbálok egy programot a FIFO fájl, de kapok csőtörés a kibocsátás. Itt a kód -

#include<iostream>
#include<stdlib.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
using namespace std;
int main(int argc,char *argv[])
{
int fd; //stores file descriptor returnd from open
char buf[256];
if(argc<2||argc>3)
{
    cout<<Invalid Arguments;
    return 1;
}

mkfifo(argv[1],0777);
if(argc==3)
{   
    cout<<Writer\n;
    if((fd=open(argv[1],O_WRONLY))==-1)
    {
        perror(open);
        return 1;
    }
    write(fd,argv[2],strlen(argv[2]));
    sleep(10);
}
else
{   cout<<Reader\n;
    if((fd=open(argv[1],O_RDONLY|O_NONBLOCK))==-1)
    {       
        perror(open);
        return 1;
    }

    read(fd,&buf,sizeof(buf));
    cout<<buf;

}
 close(fd);
 return 1;
 }

Output: Az alábbiakban Fifo a fájl nevét és a Hello a tartalom.

./a.out fifo hello &

Writer

./a.out fifo
Reader

[1]+  Broken pipe  

Kéne „Hello”, mint a kimeneti. Tud valaki segíteni?

A kérdést 16/03/2016 17:02
felhasználó
Más nyelveken...                            


2 válasz

szavazat
1

Az írási történik, mielőtt elkezdi az olvasó. Ha írsz egy cső, és nincs olvasó kapsz SIGPIPE.

Ebben a különleges design, meg kell kezelni SIGPIPE a retry logika.

Válaszolt 16/03/2016 17:13
a forrás felhasználó

szavazat
1

A hiba, amit kap EPIPE, és ha olvasni egy writekézi látni fogja, hogy kapsz EPIPE, ha

fd csatlakoztatva van egy cső vagy foglalat, amelynek leolvasási vége zárt.

Akkor ez a hiba, mert megnyitja az olvasó cső vége nem-blokkoló mód, ami azt jelenti, a readhívás nem fogja blokkolni, és várjon adatok vételét helyett, amikor a readhívást azonnal vissza a csövet lezárjuk, és lépjen ki a folyamatot.

Ez azt jelenti, ha fut az író nincs egy vár az adatokat írsz, és akkor kap a hiba.

Meg kell futtatni az olvasási és az író fordított sorrendben: először az író így ír a cső, és majd az olvasót, hogy olvassa az adatokat a cső.

Válaszolt 16/03/2016 17:14
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more