私は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)を起動するたびに印刷するようにしています。私はあなたがパイプを開いて、何がある場合は遅延なしで、読み込みループを持つようにしたい把握事前
のためにもスワップのでしょうか?私はどんなループも見ません。 – unwind
もっと情報が必要です。しかし、読んでいるものがなければ、読み込みはループでブロックされるようです。 'select()'はあなたの友人でしょう。 – Holger
ループ上で読み込みプログラムを実行するために、while(1)を追加したいと思います。 –