2016-07-06 24 views
1

現在VxWorksでコードを移植しています。私はシミュレータを使って変更を検証します。 このコードでは、多くのパイプとソケットを開く必要があります。私はこれらのファイル記述子のオープンに問題があります。確かに、私は17のファイル記述子(ソケットまたはパイプが同じエラーを引き起こす)を開くことができますが、次のエラー "EMFILE:開いているファイルが多すぎます"を返します。 ネットに関するいくつかの調査の後、グローバル変数NUM_FILESを変更しましたが、この変更は効果がありませんでした。 同時に開いているファイル記述子の数を制限するシミュレータであるかどうか知っていますか? VXWORKSシミュレータの制限?

は私も十分でないファイル記述子が使用可能であることに問題があったあなたの助け

答えて

2

私は私がRTP_FD_NUM_MAX を変更しなければならなかった問題

が、それははい、後に私は再コンパイルのだ値を変更し

+0

ニース...知っておいてよかった! –

1

いただきありがとうございます。 NUM_FILESを50に設定すると問題が解決しました。この制限は、ファイルディスクリプタテーブルを静的に割り当てたVxWorksカーネル内で行われます。

私が知る限り、NUM_FILESはカーネルの設定値であるため、カーネルの再コンパイルが必要です。あなたがロードされていない、さらにバイナリとたて始めたのVxWorksやタスクが開始されていることを行う場合

int countFreeFds(void) 
{ 
    int count = 0; 
    int i; 
    FILE *fd[100]; 

    for (count = 0; count < 100; count++) 
    { 
     fd[count] = fopen("somefile", "r"); /* some any existing file */ 
     if (fd[count] == NULL) 
     { 
      break; 
     } 
    } 

    for (i = (count - 1); i >= 0; i--) 
    { 
     fclose(fd[i]); 
    } 

    return (count); 
} 

あなたはシェルのVxWorks上で以下の機能をコンパイルして実行することにより、自由なファイル記述子の数を数えることができますcountFreeFdsによって返される値は、NUM_FILESに近い数値を返します。

(私は数年前に使用したソースにアクセスできなかったので、上記の関数をテストしていないことにも注意してください...また、ソケットを使用するようにコードを変更することもできますパイプの代わりにそれは違いはありません無料のファイル記述子に関する)

+0

特定のRTP値でしたカーネル VxWの初期化時にNUM_FILESの値が変更されていると確信していますorkそして私はカーネルでそれを修正したように100に等しい。 – basile

+0

私はRTPで作業していますが、問題に影響するかどうかはわかりません。 – basile