サーバーとクライアントの2つのプロセスがあり、パイプ(C ++、Linux)を介して通信する必要があります。O_RDONLY
サーバーはフラグでパイプを開き、クライアントは。で開きますO_WRONLY
。ただし、サーバーはopen
関数でブロックしますが、クライアントは正常に実行されているように見えます(open
関数は成功を返し、関数も同様に返しますwrite
)。
フラグが設定されている場合O_NONBLOCK
、読み取り機能は続行されることを読みましたが、クライアントが接続されていない場合は続行したくありません-クライアントが接続されるまでブロックしても問題ありませんが、私の場合はブロックされたままですクライアントの実行が終了した後...
私が間違っていることを教えてくれませんか...?
コードは次のとおりです。
// Server side
int pipe;
int status, nr_read = 0;
status = mkfifo(FIFO_NAME, 0666);
if (status < 0)
{
// If the file already exists, delete it
unlink(FIFO_NAME);
// Try again
status = mkfifo(FIFO_NAME, 0666);
if(status < 0)
{
printf("mkfifo error: %d\n", status);
return status;
}
}
pipe = open(FIFO_NAME, O_RDONLY);
printf("Never gets here...\n");
[...]
nr_read = read(pipe, my_char_array, CHAR_ARRAY_SIZE);
[...]
close(pipe);
unlink(FIFO_NAME);
「printf」行に到達することはありません...
// Client side:
int pipe, nr_sent = 0;
int status = 0;
pipe = open(FIFO_NAME, O_WRONLY);
if (pipe < 0)
{
printf("open fifo error: %d\n", status);
return pipe;
}
[...]
nr_sent = write(pipe, my_char_array, CHAR_ARRAY_LENGTH);
[...]
close(pipe);
編集
私はその行について言及しませんでした
#define FIFO_NAME "MYFIFO"
...そしてここに問題がありました:Jody Haginsが言ったように、パスは相対的なものであり、プロセスは異なるフォルダーから開始され、彼らは異なるファイルを開こうとしていました。