在Linux系统下,我们通常需要获取当前程序执行的路径,以便读取或写入配置文件、日志文件等。本文将简要介绍如何在C语言中获取当前路径。
一、使用getcwd函数获取当前路径
getcwd函数用于获取当前的工作路径,其函数原型为:
“`c
char *getcwd(char *buf, size_t size);
“`
其中,buf是保存当前路径的缓存区,size是buf的大小。函数返回buf指针,如果出现错误,返回NULL。
例子如下:
“`c
#include
#include
#define MAX_PATH 1024
int mn()
{
char path[MAX_PATH];
if(getcwd(path, MAX_PATH) != NULL)
printf(“Current path: %s\n”, path);
else
perror(“getcwd() error”);
return 0;
}
“`
在以上代码中,我们首先定义了一个大小为MAX_PATH的字符数组path,用于保存当前路径。然后,我们使用getcwd函数获取当前路径,并将返回的值保存到path数组中。我们输出path数组的值,即可获取当前路径。
二、使用readlink函数获取当前路径
readlink函数用于读取符号链接文件的值,其函数原型为:
“`c
ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
“`
其中,pathname是符号链接文件的路径名,buf是缓存区,bufsiz是缓存区大小。如果成功,该函数返回赋值到缓存区中的字符数;如果失败,返回-1。
我们可以利用readlink函数获取当前路径。如下:
“`c
#include
#include
#include
int mn()
{
char path[PATH_MAX];
if(readlink(“/proc/self/exe”, path, sizeof(path)) != -1)
printf(“Current path: %s\n”, path);
else
perror(“readlink() error”);
return 0;
}
“`
在以上代码中,我们首先定义了一个大小为PATH_MAX的字符数组path,用于保存当前路径。然后,我们使用readlink函数读取符号链接文件”/proc/self/exe”的值,并将返回的值保存到path数组中。我们输出path数组的值,即可获取当前路径。
三、
相关问题拓展阅读:
- c语言怎么获得linux的home目录
- Linux系统中获取路径的文件名的方法
- linux怎么显示并拷贝当前文件路径
c语言怎么获得linux的home目录
可以利用getenv函数来实现。
在Linux系统中,home目录的定义是通过系睁扒统
环境变毁早铅量
中的HOME变量值来确定的,在shell下可以通过
echo $HOME来查看。
而在纤好C语言中,库函数getenv可以用作获取环境变量值。该函数位于
stdlib.h
, 原型为
char *getenv(char *name);
功能为获取名字为name的环境变量
字符串
。
所以,下面代码就可以获取到home目录名了:
char *home;
home = getenv(“HOME”);
printf(“the home path is %s\n”, home);
#include
#include
#include
#include
int main(){
DIR *dir;
struct 液枝 dirent 吵盯 *ptr;
dir = opendir(“/home”);
while((ptr = readdir(dir)) != NULL)
printf(“d_name: %s\n”, ptr->d_name);
升埋和 closedir(dir);
return 0;
}
#include 吵盯
#include
#include
int main(void)
{
液枝 printf(“当前用户的home目录升埋和为: %s\n”, getpwuid(getuid())->pw_dir);
return 0;
}
linux系统的home目录,直接输入“cd ~”就可以了吧
Linux系统中获取路径的文件名的方法
这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下
代码如下:
>#basename
/root/aaa/bbb/dabu.txt
显示:
代码如下:
dabu.txt
#获取路径的文件名
shell脚本中如何获得脚本文件所在路径?
方法一:
代码如下:
>#DIR=$(cd
“$(dirname
“$0″)”;
pwd)
>#echo
$DIR
但是像这种dirname
“$0″这种写法,在遇到source命令时会得到错误的结果。
方法二:
代码如下:
>#echo
“$(
cd
“$(
dirname
“${BASH_SOURCE}”
)”
&&
pwd
)”
上面一行命令可以获得唤行信脚本的和轮绝对轮径,无论你在何处调用这个脚本。
但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:
代码如下:
SOURCE=”${BASH_SOURCE}”
while
-h
“$SOURCE”
>;
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
DIR=”$(
cd
-P
“$(
dirname
“$SOURCE”
)”
&&
pwd
)”
SOURCE=”$(readlink
“$SOURCE”)”
$SOURCE
!=
/*
>>
&&
SOURCE=”$DIR/$SOURCE”
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
done
DIR=”$(
cd
-P
“$(
dirname
“$SOURCE”
)”
&&
pwd
)”
也可与source,bash
-c命令使用
但是,如果你在脚本中使用先cd切换到其他目录,在运行时上面的命令片段时,则上面的命令不能等到正确的结果。可以参考关于$CDPATH
陷阱的文章。想理解它如何其作带晌用的,可以运行下面的代码:
代码如下:
#!/bin/bash
SOURCE=”${BASH_SOURCE}”
while
-h
“$SOURCE”
>;
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
TARGET=”$(readlink
“$SOURCE”)”
if
$SOURCE
==
/*
>>;
then
echo
“SOURCE
‘$SOURCE’
is
an
absolute
symlink
to
‘$TARGET’”
SOURCE=”$TARGET”
else
DIR=”$(
dirname
“$SOURCE”
)”
echo
“SOURCE
‘$SOURCE’
is
a
relative
symlink
to
‘$TARGET’
(relative
to
‘$DIR’)”
SOURCE=”$DIR/$TARGET”
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
fi
done
echo
“SOURCE
is
‘$SOURCE’”
RDIR=”$(
dirname
“$SOURCE”
)”
DIR=”$(
cd
-P
“$(
dirname
“$SOURCE”
)”
&&
pwd
)”
if
“$DIR”
!=
“$RDIR”
>;
then
echo
“DIR
‘$RDIR’
resolves
to
‘$DIR’”
fi
echo
“DIR
is
linux怎么显示并拷贝当前文件路径
显示当前路径使用
穗渣模pwd
拷猜缓贝当前梁芹路径是指?复制到哪里?
文件复制命令是cp
Linux系统下复制命令为cp,但是cp不带参数只能复制文件,如弊掘哗果需要把一个目录下的子目录复制到当前目录,需要加参数-R递归操作,把目录下文件和子目录一并处理:
例如:把/mnt/zhidao子目录复制到当前/etc目录下
cp -R /mnt/zhidao /etc
Linux系统下cp命令常用参数:
-a:此参数的效果和同时指定”-dpR”参数相同
-b:删除、覆盖目的文件先备份
-f:强行复制文件或目录, 不论目的文件或目录是否已经存在
-i:覆盖文件之前先询问用户
-l:对源文件建立硬链接,而非复制文件
-p::保留源文件或目录的散宏属性,包括所有者、所属组、权限与时间
-r:递归处理,将指定目录下的文件与子目录一并处理。
-R:递归处理,将指定目录下的文件及子目录一并处租行理
-v :显示执行过程
关于linux c获取当前路径的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/177902.html<