Kezdőoldal » Számítástechnika » Programozás » Nevesitett csővezeték kiolvasá...

Nevesitett csővezeték kiolvasás hogyan?

Figyelt kérdés
Készitettem egy nevesitett csővezetéket, irtam is bele adatokat, azt is tudom, hogy ebben a programban hogyan kéne azt kiolvastatni belőle, a gond az, hogy én egy másik programban szeretném ezt kiolvastatni, és utána megszüntetni a fifot amit létre hoztam. A segitséget előre is köszönöm.

#programozás #FIFO #csővezeték #named #nevesitett
2015. ápr. 15. 18:37
 1/8 iostream ***** válasza:
Mi a gond? Pontosan ugyanúgy kell.
2015. ápr. 15. 19:12
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
mkfifo-val megcsináltam a csővezetéket, meg is nyitottam az open-el, irtam is bele, de a másik programba beleirtam a read-es részt, hogy olvasson ki ott is deklaráltam a változokat mint az elsőbanint fd---(ebben nyitottam meg a fifomat), ret--(ebbe hoztam letre a fifot);char buf[32]---(ebbe irtam szoveget); de nem tudom kiolvastatni amit bele irtam itt akadtam el.
2015. ápr. 17. 13:37
 3/8 A kérdező kommentje:
Na szóval már megoldottam a problémát, ki tudom olvastatni a másik programban. Most olyat akarok, hogy az első programban ujbol irni a fifomba és ezt is kiolvastatni de ez nem jön össze. Hogyan oldható ez meg egyáltalán?
2015. ápr. 18. 20:47
 4/8 anonim ***** válasza:

Így kód tekintetébe látatlanba hagyni nem a legkézenfekvőbb hagyni a válaszírókat.


Gondolom írás után lezártad a fájlt avagy a csövet az író oldalon. Ne zárd le csak akkor ha mindent beleírtál már!

A csőbe történő írás pufferelt módon történik, ténylegesen akkor történik meg az írás alapesetben ha megtelt a puffer. Ekkor üríti a puffert és kiírja, a fogadó oldal ekkor tudja csak kiolvasni a tartalmát. Ha lezárod akkor üríti a puffert és kiírja az adatokat lezárás előtt, de ekkor többet nem lehet írni ugyanazzal a file descriptor-al és az olvasó fájlvége jelzést kap.

Flush-olással mi magunk írhatjuk ki majd ürítjük a puffer tartalmát, ekkor ténylegesen kiírásra is kerül, a fogadó oldal ekkor azonnal olvasni tudja.

2015. ápr. 22. 02:09
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:

Az író program így néz ki:


#include <fcntl.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>


int main()

{

int fd;


char * myfifo = "/tmp/myfifo";



mkfifo(myfifo, 0666);



fd = open(myfifo, O_WRONLY);

write(fd, "ez van a fifoban", sizeof("ez van a fifoban"));



close(fd);


unlink(myfifo);


return 0;

}


Az olvasó pedig:


#include <fcntl.h>

#include <stdio.h>

#include <sys/stat.h>

#include <unistd.h>

#define MAX_BUF 1024


int main()

{

int fd;

char * myfifo = "/tmp/myfifo";

char buf[MAX_BUF];


fd = open(myfifo, O_RDONLY);

read(fd, buf, MAX_BUF);

printf("kiolvasva: %s\n",buf);



close(fd);


return 0;

}



És ezután kéne hogy kiolvastam, megint írni az elsőben és kiolvasni. Bele kéne még írni mikor megnyitom írásra a fifot, hogy O_NONBLOCK, meg az olvasásnál is?:

2015. ápr. 22. 18:21
 6/8 anonim ***** válasza:

Sosem kezeltem fájlt így, elkezdtem próbálgatni hol működött hol nem. Ha pl egy másodpercet késeltetem a következő írási művelet előtt akkor működik. A puffer tartalma az olvasóhoz képest elég furcsán elcsúszhat.

Késeltetés nélkül a csőbe írt adatok egy részét nem kapja meg a fogadó.

Végül is ha meggányolom akkor megcsinálja, de nem garantálom , hogy mindig működik is. Amiket használsz open, read , write rendszerhívások eszköz fájlok kezelésére valók. Ha pl írsz egy kernelmodult ami közvetlenül hozzáfér a merevlemezhez akkor ezekkel a rendszerhívásokkal megteheted, de nem erre való amire használni akarod.

Megoldás:

író : [link]

olvasó : [link]

2015. ápr. 24. 00:21
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
Köszi. Kiirja a szöveget, de nem egymás alá hanem egyben a kettőt, valamint 0-500ig a ciklus változó értékét is kiirja a képernyőre. De köszönöm.
2015. ápr. 24. 18:23
 8/8 anonim ***** válasza:

Szívesen.

Persze, hogy nem egymás alá írja mert nem raktam sortörést.(Nem is akartam.) Az asfd után \n-el raktam sortörést.

(Nem gondoltam, hogy ezt a szádba kell rágni.)

2015. ápr. 24. 21:23
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!