[linux] named pipes

Robert Varga niteshadow na hq.alert.sk
Čtvrtek Srpen 10 19:47:03 CEST 2000


On Thu, Aug 10, 2000 at 06:49:11PM +0200, Branislav Vartik wrote:
> Vie mi niekto poradit ako naprogramujem 2 standalone programy z ktorych
> jeden zapisuje do FIFO named pipe a druhy z nej cita? pripadne nejaky
> link example?

velmi jednoduche:

potrebujes najskuor vytvorit danu pipe... V shelly to spravis cez mkfifo(1),
v Ccku cez mknod(2).

	dev_t d;
	
	mknod("/tmp/pipe", S_IFIFO | 0600, d);

 A potom tu pipe pouzvas ako normalny subor:
jeden proces si ju otvori na citanie a druhy na zapis.

proces1:
	int infd = open("/tmp/pipe", O_RDONLY);

proces2:
	int outfd = open("/tmp/pipe", O_WRONLY);

operacia open() blokuje na obidvoch stranach, pokial niektory iny proces
neotvori pajpu pre naprotivnu operaciu. T.z. nemozes najskuor otvorit pajpu
na zapis, potom sa forknut a az potom ju otvorit pre citanie.

Rychly priklad:

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

#define PIPENAME "/tmp/pipe"

int main()
{
	int fd;
	dev_t d;

	/* skus vytvorit pipe */
	if (mknod(PIPENAME, S_IFIFO | 0600, d)) {
		perror("mknod");
		return 1;
	}

	/* Vytvor novy proces */
	fd = fork();

	/* Chyba */
	if (fd < 0) {
		perror("fork");
		return 1;
	}
	
	if (fd) {
		/* parent proces */
		if ((fd = open(PIPENAME, O_WRONLY))) {

			/* write do pajpy ... */

		} else
			perror("open");
	} else {
		/* child proces */
		if ((fd = open(PIPENAME, O_RDONLY))) {

			/* read z pajpy ... */

		} else
			perror("open");
	}

	/* a este zmazat pajpu. */
	unlink(PIPENAME);
}


-- 
Kind regards,
Robert Varga
------------------------------------------------------------------------------
n na hq.sk                                    http://hq.sk/~niteshadow/gpgkey.txt
 
------------- další část ---------------
Netextová příloha byla odstraněna...
Jméno: [žádný popis není k dispozici]
Typ: application/pgp-signature
Velikost: 232 bytes
Popis: [žádný popis není k dispozici]
Url : http://lists.linux.sk/pipermail/linux/attachments/20000810/2c5ee1c2/attachment.bin 


Další informace o konferenci linux