Boru Broken, FIFO dosyası

oy
45

Ben FIFO dosyasını kullanmak için bir program çalışıyorum ama çıktı olarak Kırık boru alıyorum. İşte kod -

#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;
 }

Çıktı: Fifo dosyasının adıdır ve Merhaba içeriğidir görebilirsiniz.

./a.out fifo hello &

Writer

./a.out fifo
Reader

[1]+  Broken pipe  

Ben çıktı olarak Merhaba almalısınız. Biri yardım edebilir mi?

Oluştur 16/03/2016 saat 17:02
kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

Eğer okuyucu başlamadan önce yazma olur. Eğer bir boruya yazma ve hiçbir okuyucu varsa sen SIGPIPE olsun.

Bu özel tasarım, sen gerek idare yeniden deneme mantığı ile SIGPIPE.

Cevap 16/03/2016 saat 17:13
kaynak kullanıcı

oy
1

Alacağınız hatadır EPIPEve bir okursanız writekitabını size olsun göreceksiniz EPIPEne zaman

fd olan okuma ucu kapalı olan bir boru veya soket bağlanır.

Eğer demektir engellenmeyen modunda boru, okuma ucunu açmak için bu hatayı olsun readengellemek ve veri alınacak beklemeyeceğiz çağrıyı ne zaman yerine, readçağrı derhal geri Eğer boruyu kapatın ve işlem çıkın.

Yani yazar çalıştırdığınızda orada yazdığınız veri bekleniyor kimse olduğunu ve hata alıyorum demektir.

O boruya yazar ve böylece ilk yazar: Sen okuma ve karşı sırayla yazar çalıştırmak için gereken sonra borunun veri okumak için okuyucu.

Cevap 16/03/2016 saat 17:14
kaynak kullanıcı

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