2011-12-03 57 views
3

我正在研究一個項目,其中我需要知道調用系統調用的可執行文件的當前工作目錄。我認爲這將是可能的,因爲一些系統調用如open將利用該信息。在內核代碼中獲取當前工作目錄

請問我可以如何獲取字符串中的當前工作目錄路徑?

回答

8

您可以看看如何實現getcwd系統調用來了解如何執行此操作。

即系統調用是在fs/dcache.c並調用:

get_fs_root_and_pwd(current->fs, &root, &pwd); 

rootpwdstruct path變量,

該函數被定義爲在include/linux/fs_struct.h一個內聯函數,其中還包含:

static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd) 

這似乎是你在之後。

+0

OK是不是有沒有比這更簡單的東西,比如一個簡單的函數調用,它可以將當前工作目錄寫入字符串? – gaurav

+0

這是一個簡單的函數調用來獲取'struct path'。我誤解了你的問題,而你實際上並沒有編寫內核代碼嗎? – Mat

+0

不,我正在編寫內核代碼實際上我正在對fs/namei.c進行一些更改,所以我需要知道當前的工作目錄嗎?我想我可以調用一些sys_getcwd類型的調用,就像我可以使用sys_getpid來獲取pid。你能告訴我在哪裏可以看到出口是做什麼的,以便我可以使用該功能?或者我會用你的答案。 :) – gaurav

0

你在碼頭怎麼做?您使用pwd查看名爲PWD的環境變量。

#include <stdlib.h> 

int main(int ac, char **av) { 
    printf("%s\n", getenv("PWD"); 

    return 0; 
} 

如果你想知道在哪個目錄下的可執行文件位於你可以從getenvargv[0]合併的信息。

+1

對不起,但我需要在內核代碼中獲取當前工作目錄我無法在此使用此代碼。 – gaurav

+0

@gaurav:好吧,我錯了,我誤解了你的問題。 – Daimrod