0

1つのスレッドが書き込むFIFOパイプを開こうとしていますが、同期はすべて良好です。ただし、理解できる理由から、追加モードで開く必要があります。

私がそれを次のように開くとき:

        ret_val = mkfifo(lpipename.c_str(), 0666);
        if((pipehandler = open(lpipename.c_str(), O_RDWR)) < 1) 
    {
        perror("Failed to open pipe file");
        syslog(LOG_ERR, "Failed to open pipe file");
        exit(1);
    }

問題はありません。フォルダを「ls」すると、パイプが黄色でマークされているのがわかります。

しかし、次のようにパイプを開こうとすると、追加モードで次のようになります。

    ret_val = mkfifo(lpipename.c_str(), 0666);
    if((pipehandler = open(lpipename.c_str(), O_RDWR| O_APPEND)) < 1) 
    {
        perror("Failed to open pipe file");
        syslog(LOG_ERR, "Failed to open pipe file");
        exit(1);
    }

フォルダ内のパイプがまったく見えません。記録のために、私はオプションのいずれかでエラーが発生します誰かが理由のアイデアを持っていますか?

ありがとう

4

2 に答える 2

0

O_APPEND は、一度に複数のプロセスがファイルにデータを追加する場合、NFS ファイル システムでファイルが破損する可能性があります。これは、NFS がファイルへの追加をサポートしていないためです。そのため、クライアント カーネルはそれをシミュレートする必要がありますが、これは競合状態なしでは実行できません。

これが原因である可能性があります。詳細については、以下のリンクを参照してください。

http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html

于 2012-11-06T12:12:43.550 に答える
0

FIFOです。追加以外に何ができるでしょうか? 追加は標準であると信じているため、どのように開いても常に追加されます。

于 2014-01-22T22:28:03.670 に答える