The UNIX and Linux Forums  


Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > UNIXの詳細&エキスパートのためのユーザー
Googleのunix.com



UNIXの詳細&エキスパートのためのユーザー 専門家への専門家。先進のUNIXは、 UNIXのコマンドは、 Linux 、オペレーティングシステム、システム管理、プログラミング、シェル、シェルスクリプトは、 Solarisのは、 Linux 、 HP - UXのは、 AIXので、 OS X 、 BSDのこちらをご覧ください。

その他のUNIXおよびLinuxフォーラムトピックは参考にすること
スレッド スレッドスターター フォーラム 返信 最後の投稿
FIFOのに疑問 Akshay UNIXのダミー質問と回答のため 0 2008年6月6日 08:56午前
先入先出法を使用する方法 鼓室 高レベルのプログラミング 3 2006年6月5日 11:15午前
FIFOの問題 runawayNinja 高レベルのプログラミング 1 2004年4月29日 04:10午後
FIFOのNFSの上 saabir UNIXの詳細&エキスパートのためのユーザー 2 2003年8月6日 09:03午前
パイプとFIFOの.... M3xican 高レベルのプログラミング 4 2002年7月20日 08:22午前

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2009年6月30日
jackhab jackhab is offline
登録ユーザー
  
 

参加日: 2009年6月
記事: 1
FIFOのファイルoverfowことはできますか?

I出力ロガー情報をFIFOのファイルにします。私のアプリケーションか月に立候補することができます。私の質問がある場合には常に1つの側面とは反対側からは誰にも読んで書いているファイルのFIFOはどうなるのですか?
やがて、リセット、すべてのOSのスタックオーバーフローのRAMかかりますか?

ありがとう。
  #2固定リンク)  
Old 2009年6月30日
mgessner mgessner is offline
登録ユーザー
  
 

参加日: 2007年10月
投稿: 50
さて、あなたはかなり単純なテストを考案する可能性がある。

/ワットmkfifoはFIFOを作成します。 2つのプロセスは、作家と読者を作成します。

FIFOのオープンは行わないため、読者の書き込みがブロックされます。ときに、それが目を覚まし、その後は定期的に、いくつかのバイトを書くのと、各書き込みログはstderrに書き込みunblocks 。

読者のプロセスを実行して、それは少し寝ていると、 10回を読んだことがあると言うと、何を読み取る投棄。その後は、先入先出法を閉じて、終了します。

何が表示されるはず、スティーブンスAPUEによると、 SIGPIPEが生成される原因に書き込む必要がありますされています。

例:

コード:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>

int sigpipe_caught = 0;

#define TESTLOG(s) testlog(__FUNCTION__, s)

void testlog (const char *who, const char *msg)
{
  fprintf (stderr, "%s: %s\n", who, msg);
}

void writer (void)
{
  int f;
  int value = 0;
  int err;
  int done = 0;

  TESTLOG ("starting");
  if ((f = open ("fifo", O_WRONLY)) != -1)
  {
    TESTLOG ("opened fifo");

    while (done <= 0)
    {
      char buf[64];
      err = write (f, &value, sizeof value);

      if (sizeof value == err)
      {
        sprintf (buf, "wrote %d", value);
        TESTLOG (buf);
        value++;
      }
      else
      {
        sprintf (buf, "err = %d", err);
        TESTLOG (buf);
        sprintf (buf, "sigpipe_caught = %d", sigpipe_caught);
        TESTLOG (buf);
        done++;
      }

      TESTLOG ("sleeping");
      sleep (1);
    }

    close (f);
    TESTLOG ("closed fifo");
  }
}

void reader (void)
{
  int f;
  int i;
  int value;
  int err;

  TESTLOG ("sleeping 2");
  sleep (2);
  TESTLOG ("awake");

  if ((f = open ("fifo", O_RDONLY)) != -1)
  {
    TESTLOG ("opened fifo");

    for (i = 0; i < 10; i++)
    {
      char buf[64];

      err = read (f, &value, sizeof value);
      if (sizeof value == err)
      {
        sprintf (buf, "read %d", value);
        TESTLOG (buf);
      }
      else
      {
        sprintf (buf, "err = %d", err);
        TESTLOG (buf);
      }
    }

    TESTLOG ("closing fifo");
    close (f);
  }
  else
  {
    TESTLOG ("failed to open fifo");
  }
}

void sigpipe (int a)
{
  TESTLOG ("caught SIGPIPE");
  sigpipe_caught = 1;
}

int main (void)
{
  signal (SIGPIPE, sigpipe);

  if (fork())
    writer();
  else
    reader();

  return 0;
}

私はシステムのカップルでこの実行して、私はそこが問題(たとえばされるようですが、 1つのシグナルハンドラから...). fprintfを使用しないでください

しかし、私は、ポイントを示している。
  #3固定リンク)  
Old 2009年6月30日
ジムマクナマラ jim mcnamara is online now Forum Staff  
...@...
  
 

参加日: 2004年2月
場所: NM
投稿数:5790
のFIFO /パイプ

またPIPE_BUFに知っておくべきこと、書くことができますバイトの最小数の保証。この実装で異なります。

パイプ部分がないときは、バッファの空き容量が要求されたサイズより大きい場合に書き込みされています。と書く代わりに-1が返されます。 errno EAGAINを設定してください。

最後に、高性能メッセージングまたはIPCは、パイプ/ FIFOは素晴らしい選択されていません。
アトミック性の保証はない存在するため、単一のパイプで複数の読者に問題があることができます。

ジムマクナマラによって編集最終; 2009年6月30日に 11:17午前..理由:スペル
  #4固定リンク)  
Old 2009年6月30日
fpmurphy's Avatar
fpmurphy fpmurphy is offline Forum Staff  
モデレータ
  
 

参加日: 2003年12月
場所:フロリダ州
投稿数: 1935
によると POSIX.1 - 2008の書き込み( )errno EPIPEに設定されているSIGPIPE信号が呼び出しスレッドに送信されます。
  #5固定リンク)  
Old 2009年6月30日
ジムマクナマラ jim mcnamara is online now Forum Staff  
...@...
  
 

参加日: 2004年2月
場所: NM
投稿数:5790
私は参照マークロックカインド[詳細UNIXのプログラミング'秒6.2.2 。および のPOSIX -私は非ブロッキングと仮定します。


コード:
If O_NDELAY or O_NONBLOCK is set, the write returns -1 and
              sets errno to [EAGAIN].

私は明確ではなかった。
Reply

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 03:08午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0