経由でプロセスの現在のディレクトリを取得することは可能struct task_struct
ですか? struct fs_struct
ポインターがあることはわかりpwd
ますが、この情報が格納されている正確な変数を取得できません。
また、現在のディレクトリの値を変更できますか?
経由でプロセスの現在のディレクトリを取得することは可能struct task_struct
ですか? struct fs_struct
ポインターがあることはわかりpwd
ますが、この情報が格納されている正確な変数を取得できません。
また、現在のディレクトリの値を変更できますか?
あなたはかなり古いカーネルに取り組んでいるので、私はいくつかの掘り下げをしなければなりませんでした。この種のことを処理する簡単な方法の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エントリを実際の名前に変換することは別の演習です。