掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24836

ソケットディスクリプタに関する質問
投稿者---tongari(2005/12/16 17:09:17)


ソケットディスクリプタについて質問があります。

環境は、Linux
コンパイラは、gccとなります。

ソケットディスクリプタは、socket関数より生成されますが、
socket関数で生成された値を使用したくない場合があったら、
別のソケットディスクリプタを割り当てることはできるので
しょうか?

例えば、
カーネルより、5というソケットディスクリプタが割り当てられた
場合、5は使用せずに、8を使用するようにする

と言った感じです。

カーネルで管理されているので、そんなことできないの
ですかね。

変な話ですが、ご存知の方ご教授下さい。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ソケットディスクリプタに関する質問 24837 zero 2005/12/16 18:04:22


No.24837

Re:ソケットディスクリプタに関する質問
投稿者---zero(2005/12/16 18:04:22)


dup2(2) を参照してみて下さい。


この投稿にコメントする

削除パスワード

No.24839

Re:ソケットディスクリプタに関する質問
投稿者---tongari(2005/12/16 19:28:54)


>dup2(2) を参照してみて下さい。

有難うございます。解決いたしました。

確認プログラムを下記に示します。

#include <stdio.h>
#include <sys/socket.h>

int main()
{
    int sd;
    int fd_chk;
    sd = socket(PF_INET, SOCK_STREAM, 0);
    if(sd == -1) {
        perror("socket failure");
        return -1;
    }
    fd_chk = dup2(sd, sd + 100);
    close(sd);
    printf("sd:%d\n", fd_chk);


    return 0;
}



実行結果
sd:103


ところで疑問が1つあるのですが・・・

上記プログラムのディスクリプタ値103は、カーネルで
103を使用していることを管理しているのでしょうか?

さすがに管理していると思いますが。


この投稿にコメントする

削除パスワード

No.24841

Re:ソケットディスクリプタに関する質問
投稿者---zero(2005/12/16 20:27:05)


>ところで疑問が1つあるのですが・・・
>
>上記プログラムのディスクリプタ値103は、カーネルで
>103を使用していることを管理しているのでしょうか?
>
>さすがに管理していると思いますが。

その通りです。ファイルディスクリプタ等のプロセス情報はOS(カーネル)
が管理しています。これはOSの仕事の1つで「プロセス管理」と呼ばれます。


この投稿にコメントする

削除パスワード

No.24843

解決
投稿者---tongari(2005/12/16 20:47:48)


>>ところで疑問が1つあるのですが・・・
>>
>>上記プログラムのディスクリプタ値103は、カーネルで
>>103を使用していることを管理しているのでしょうか?
>>
>>さすがに管理していると思いますが。
>
>その通りです。ファイルディスクリプタ等のプロセス情報はOS(カーネル)
>が管理しています。これはOSの仕事の1つで「プロセス管理」と呼ばれます。


zeroさんのおかげで解決することができました。
有難うございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧