2

経由でプロセスの現在のディレクトリを取得することは可能struct task_structですか? struct fs_structポインターがあることはわかりpwdますが、この情報が格納されている正確な変数を取得できません。

また、現在のディレクトリの値を変更できますか?

4

1 に答える 1

4

あなたはかなり古いカーネルに取り組んでいるので、私はいくつかの掘り下げをしなければなりませんでした。この種のことを処理する簡単な方法の1つは、情報が/ procにあるかどうかを確認し、それが何をするかを調べることです。fs / procでcwdをgrepすると、次のようになります。

static int proc_cwd_link(struct inode *inode, struct dentry   **dentry,   struct vfsmount **mnt)
{
    struct fs_struct *fs;
    int result = -ENOENT;
    task_lock(inode->u.proc_i.task);
    fs = inode->u.proc_i.task->fs;
    if(fs)
        atomic_inc(&fs->count);
    task_unlock(inode->u.proc_i.task);
    if (fs) {
        read_lock(&fs->lock);
        *mnt = mntget(fs->pwdmnt);
        *dentry = dget(fs->pwd);
        read_unlock(&fs->lock);
        result = 0;
        put_fs_struct(fs);
    }
    return result;
}

proc iノードはタスクを指します(inode-> u.proc_i.task、これもtask_lock()のものによって提供されます)。task_struct定義を見ると、pwdのdentryポインターを持つstruct fs_struct*fsへの参照があります。ただし、dentryエントリを実際の名前に変換することは別の演習です。

于 2013-03-14T17:05:58.017 に答える