2009-05-10 17 views
2

私は呼び出し元から有効な "fd"オブジェクトを取得します。ファイル、ソケット、デバイスなどを指しているかどうか、どのようにfdタイプが見つかっていますか? 参照される型に応じて、特定の関数を実行する必要があります。たとえば、fdがFileに関連付けられている場合、読み込みが必要です。それがソケットに関連付けられている場合は、ソケットのプロパティを取得する必要があります。fdに関連付けられたデバイスタイプを取得する方法

答えて

6

まあ、少なくとも理論的には、あなたはまだソケット用、およびデバイスのために、パイプの読み取りを行い、そして.... :-P

あなたはソケットからより多くのデータが必要な場合ソケットアドレスなど、あなたはそれを行うための関数を呼び出すことができます。非ソケットの場合は失敗するだけで、それに対処する方法は決めるのはあなた次第です。

mode_t type; 
struct stat fdstat; 
/* ... */ 
if (fstat(fd, &fdstat) == -1) 
    /* error out */ 
type = fdstat.st_mode & S_IFMT; 
switch (type) { 
case S_IFSOCK: 
    /* socket */ 
case S_IFIFO: 
    /* FIFO */ 
/* other cases */ 
} 
+0

'あなたは本当に私が本当に知っている必要がありますknow'なければならない場合:


あなた本当にた場合は、そのモード(st_mode)を見て、あなたのファイルディスクリプタにfstatを行い、知っている必要があります。 –

関連する問題