我在一个项目中,我需要知道的可执行程序,其中调用系统调用的当前工作目录工作。我认为这是可能的,因为一些系统调用,如open,将利用这些信息。你能告诉我如何在一个字符串中得到当前的工作目录路径吗?
open
am46iovg1#
您可以查看getcwd系统调用是如何实现的。该系统调用位于fs/dcache.c中,并调用:
getcwd
fs/dcache.c
get_fs_root_and_pwd(current->fs, &root, &pwd);
字符串root和pwd是struct path变量,该函数在include/linux/fs_struct.h中定义为内联函数,其中还包含:
root
pwd
struct path
include/linux/fs_struct.h
static inline void get_fs_pwd(struct fs_struct *fs, struct path *pwd)
型这似乎就是你想要的
pepwfjgg2#
在较新的内核中,事情发生了一点点变化。您可以使用此命令获取当前工作目录:
#include <linux/init.h> // module_{init,exit}() #include <linux/module.h> #include <linux/kernel.h> #include <linux/dcache.h> // dentry_path_raw #include <linux/fs_struct.h> // get_fs_pwd static int __init get_cwd_module_init(void) { struct path abs_path; char *buf, *full_path; buf = __getname(); if (!buf) return -ENOMEM; get_fs_pwd(current->fs, &abs_path); full_path = dentry_path_raw(abs_path.dentry, buf, PATH_MAX); if (IS_ERR(full_path)) { pr_err("dentry_path_raw failed: %li", PTR_ERR(full_path)); } else { pr_info("Full path: '%s'", full_path); } __putname(buf); path_put(&abs_path); } static void __exit get_cwd_module_exit(void) { pr_info("exiting..."); } module_init(get_cwd_module_init) module_exit(get_cwd_module_exit) MODULE_AUTHOR("garlix"); MODULE_LICENSE("GPL");
字符串
ykejflvf3#
在终端中如何做到这一点?使用pwd查看名为PWD的环境变量。
PWD
#include <stdlib.h> int main(int ac, char **av) { printf("%s\n", getenv("PWD"); return 0; }
字符串如果您想知道可执行文件位于哪个目录,可以将getenv和argv[0]中的信息结合起来。
getenv
argv[0]
3条答案
按热度按时间am46iovg1#
您可以查看
getcwd
系统调用是如何实现的。该系统调用位于
fs/dcache.c
中,并调用:字符串
root
和pwd
是struct path
变量,该函数在
include/linux/fs_struct.h
中定义为内联函数,其中还包含:型
这似乎就是你想要的
pepwfjgg2#
在较新的内核中,事情发生了一点点变化。您可以使用此命令获取当前工作目录:
字符串
ykejflvf3#
在终端中如何做到这一点?使用
pwd
查看名为PWD
的环境变量。字符串
如果您想知道可执行文件位于哪个目录,可以将
getenv
和argv[0]
中的信息结合起来。