1. ホーム
  2. c

[解決済み] パイプを使って2つのプログラム間で簡単な文字列を送信するには?

2022-05-17 12:26:42

質問

ネットで検索してみたのですが、資料がほとんどありません。ちょっとした例で十分です。

EDIT つまり、2つの異なるCプログラムが互いに通信しています。一方のプログラムが"Hi"を送信し、もう一方のプログラムがそれを受信する必要があります。みたいな感じです。

どのように解決するのですか?

通常のパイプは、関連する2つのプロセスのみを接続することができます。 これはプロセスによって作成され、最後のプロセスがそれを閉じると消滅します。

A 名前付きパイプ は、その動作から FIFO とも呼ばれ、無関係な2つのプロセスを接続するために使用することができ、プロセスから独立して存在することができます。 FIFOは mkfifo() ライブラリ関数を使用して作成されます。

使用例

writer.c

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

int main()
{
    int fd;
    char * myfifo = "/tmp/myfifo";

    /* create the FIFO (named pipe) */
    mkfifo(myfifo, 0666);

    /* write "Hi" to the FIFO */
    fd = open(myfifo, O_WRONLY);
    write(fd, "Hi", sizeof("Hi"));
    close(fd);

    /* remove the FIFO */
    unlink(myfifo);

    return 0;
}

リーダー.c

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

#define MAX_BUF 1024

int main()
{
    int fd;
    char * myfifo = "/tmp/myfifo";
    char buf[MAX_BUF];

    /* open, read, and display the message from the FIFO */
    fd = open(myfifo, O_RDONLY);
    read(fd, buf, MAX_BUF);
    printf("Received: %s\n", buf);
    close(fd);

    return 0;
}

注:上記のコードでは簡略化のため、エラーチェックを省略しています。