4

投獄された Linux 環境で、現在のユーザーランド プロセスのファイル記述子のリストを C で取得したいと考えています。

fdt を取得するためのシステムコールはありますか?

4

1 に答える 1

1

ファイル記述子の数を取得する方法は知りませんが、ごまかすことができます。

新しいファイル記述子を開いて閉じます。取得した fd 番号を覚えておいてください。

0 から開始して、開くことができる最大の fd まで (この数値は getdtablesize() で取得できます)、すべてのファイル記述子をその保存された fd に dup2 します。エラーを返さないものは開いており、残りは閉じています。

簡単な例として、それらを数えるだけです:

int
count_fds(void)
{
    int maxfd = getdtablesize();
    int openfds;
    int fd;
    int i;

    openfds = 0;

    if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
            return maxfd;
    close(fd);

    for (i = 0; i < maxfd; i++) {
            if (dup2(i, fd) != -1) {
                    openfds++;
                    close(fd);
            }
    }

    return openfds;
}

複製した場合に副作用が発生する可能性のあるファイル記述子については知りませんが、常に奇妙な獣が存在するため、自己責任で使用してください。

于 2012-04-27T11:06:46.350 に答える