LINUX.ORG.RU

FIFO,write,read

 


0

2

Написать две разные программы, одна из которых пишет информацию в FIFO, а вторая - читает из него. Ни одна из программ никак не связана с другой

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

int main()
{
    int fd;
    size_t size;
    char name[]="aaa.fifo";

    umask(0);
    
    if(mknod(name, S_IFIFO | 0666, 0) < 0)
    {
        if (unlink(name)==-1)
	{
		printf("Can\'t create FIFO\n");
		exit(-1);
	}
	mknod(name, S_IFIFO | 0666, 0);
    }
    
    if ((fd = open(name, O_WRONLY)) < 0)
    {
	printf("Can\'t open FIFO for writing\n");
	exit(-1);
    }
    
    size = write(fd, "Hello, world!", 14);
    
    if (size != 14)
    {
	printf("Can\'t write all string to FIFO\n");
	exit(-1);
    }
    close(fd);
    return 0;
}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
	int fd;
	size_t size;
	char resstring[14];
	char name[]="aaa.fifo";
	
	if ((fd = open(name, O_RDONLY)) < 0)
	{
		printf("Can\'t open FIFO for reading\n");
		exit(-1);
	}
   
        size = read(fd, resstring, 14);
	if(size < 0)
	{
		printf("Can\'t read string\n");
		exit(-1);
	}
	printf("%s\n",resstring);
        close(fd);
	return 0;
}

Ну я записывал в первый проге информацию,но почему из второй прог не читается из него

Подскажите,пжлс



Последнее исправление: beastie (всего исправлений: 1)

Файл открывал хоть, там есть чего?

Bfgeshka ★★★★★
()

потому что fifo — это не ящик, куда можно положить нечто, и оно будет там лежать, пока кто-то не придет и не заберет, это типа трубы, если на другом конце никто не слушает, то и кричать туда бесполезно, все пропадет

anonymous
()

fflush после write

anonymous
()
Ответ на: комментарий от nana2000

Запускаешь обе программы паралельно и смотришь. И почему не сразу mkfifo?

beastie ★★★★★
()
Ответ на: комментарий от nana2000

ну, в условиях твоего кода получается так

чтобы заработало, перенеси создание пайпа в читалку, и запускай сначала ее, она будет висеть в сисколе read() и ждать, потом запускай писателя, который только откроет пайп, запишет туда данные и закроет

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.