2016-12-15 3 views
0

私はfifoパイプで書き込みと読み取りを行うubuntuでCプログラムを書いています。私はすでにプログラムの書き方が完璧に働いていますが、今はループで読み込みに問題があります。CでFIFOリーダプログラムをループする方法

私の読書プログラム:

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

#define MAX_CTRLS 80 

void main() 
{ 
printf("test1"); 
    char ch2[MAX_CTRLS]; 
    int pipe1; 
    pipe1 = open("/tmp/ctrl", O_RDONLY); 
printf("test2"); 
    read(pipe1, ch2, MAX_CTRLS); 
    printf("%s",ch2); 
    close(pipe1); 
} 

このプログラムはCH2で印刷後、CH2に格納し、FIFOに読むことを想定しています。しかし、それを正常に実行すると完全に動作しますが、ループで実行している間は何もしません。ここで

は、プログラム1を書いている:

void send(char ch2[MAX_CTRLS]) 
{ 
    int create; 
    create = mkfifo("/tmp/ctrl", 0666); 
    int pipe1; 
    pipe1 = open("/tmp/ctrl", O_WRONLY); 
    write(pipe1, ch2, MAX_CTRLS); 
    close(pipe1); 
} 

この1つは、このようなラインを持っている私が持っている別のプログラム、使用して動作します:printfのは、私はそのCH2が適切に設定されていることを確認できます

ch2[0] = 'a'; 
printf("%s",ch2); 
send(ch2); 

を。私は読書機能をループするために読書プログラムが必要です。別名は、ch2で設定されている毎回印刷します。

私はちょうどこの場合には、私のプログラムがsend(ch2)を起動するたびに印刷するようにしています。私はあなたがパイプを開いて、何がある場合は遅延なしで、読み込みループを持つようにしたい把握事前

+0

のためにもスワップのでしょうか?私はどんなループも見ません。 – unwind

+0

もっと情報が必要です。しかし、読んでいるものがなければ、読み込みはループでブロックされるようです。 'select()'はあなたの友人でしょう。 – Holger

+0

ループ上で読み込みプログラムを実行するために、while(1)を追加したいと思います。 –

答えて

0

Thaksは、その後、次の読み取り前に、しばらくの間、スリープ状態になります。 はこのような何かを提案する、uが意味 "ループでそれを実行している" はどのような(;;)(真BOOLVALUE ==)ながらする

int fd = -1, naptime = 200; // 200msec 

for (;;){ fd = open(pipe, mode|nodelay); if (fd != -1){ int st = read (fd, buf, sizeof(buf)); /* open OK */ // do your printing of data if any exist - st holds read chars if(st >0) printf(buf); } sleep(naptime); // sleep til next reading }

関連する問題