linux下获取程序所在目录绝对路径

简介:

【前言】

工作目录与程序所在目录的区别:

1
2
3
4
~$  ls  -l  /proc/self/cwd                                               
lrwxrwxrwx 1 walker walker 0  7月 10 10:12  /proc/self/cwd  ->  /home/walker
~$  ls  -l  /proc/self/exe 
lrwxrwxrwx 1 walker walker 0  7月 10 10:12  /proc/self/exe  ->  /bin/ls

上面示例中/home/walker为ls程序当前工作目录,/bin/ls为ls程序实际所在目录。


1、Shell版

1
2
#获取当前脚本所在绝对路径,需在脚本文件里方能执行
cur_dir=$( cd  "$(dirname " $0 ")" pwd )


2、C语言版

方法一:用realpath函数。这种方法用于开机启动程序获取自身目录会出错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
  
#define MAX_SIZE (PATH_MAX+1)
   
int  main()
{
     char  current_absolute_path[MAX_SIZE];
     //获取当前目录绝对路径
     if  (NULL == realpath( "./" , current_absolute_path))
     {
         printf ( "***Error***" );
         exit (-1);
     }
     strcat (current_absolute_path,  "/" );
     printf ( "current absolute path:%s\n" , current_absolute_path);
      
     exit (0);
}

方法二:用getcwd函数。这种方法用于开机启动程序获取自身目录会出错。

1
2
3
4
5
6
7
8
char  current_absolute_path[MAX_SIZE];
//获取当前目录绝对路径
if  (NULL == getcwd(current_absolute_path, MAX_SIZE))
{
     printf ( "***Error***\n" );
     exit (-1);
}
printf ( "current absolute path:%s\n" , current_absolute_path);

方法三用readlink函数。这种方法最可靠,可用于开机启动程序获取自身目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char  current_absolute_path[MAX_SIZE];
//获取当前程序绝对路径
int  cnt = readlink( "/proc/self/exe" , current_absolute_path, MAX_SIZE);
if  (cnt < 0 || cnt >= MAX_SIZE)
{
     printf ( "***Error***\n" );
     exit (-1);
}
//获取当前目录绝对路径,即去掉程序名
int  i;
for  (i = cnt; i >=0; --i)
{
     if  (current_absolute_path[i] ==  '/' )
     {
         current_absolute_path[i+1] =  '\0' ;
         break ;
     }
}
printf ( "current absolute path:%s\n" , current_absolute_path);


*** walker * Updated 2015-7-10 ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1029395如需转载请自行联系原作者


RQSLT

相关文章
|
11天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
47 3
|
16天前
|
存储 Linux Windows
linux常用目录
/sbin s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一版该目录名是以用户的账号命名的。 /root 该目录为系统管理员,也称为超级权限者的用户主目录。 /lib 系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /etc 所有的系统管理所需要的配置文件和子目录。 /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。 /bo
32 2
|
15天前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下的文件数量是常见的需求。本文介绍了多种方法,包括使用 `ls` 和 `wc` 命令组合、`find` 命令、`tree` 命令以及编程方式(如 Python)。无论你是新手还是有经验的用户,都能找到适合自己的方法。掌握这些技巧将提高你在 Linux 系统中的操作效率。
25 4
|
21天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
42 2
|
30天前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
42 4
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
40 1
|
1月前
|
存储 Linux 编译器
cmake的单目录和多目录的使用(Linux和Windows)
本文介绍了在Windows和Linux平台上使用CMake构建单目录和多目录项目的步骤,包括如何配置CMakeLists.txt文件以及如何生成和使用可执行文件、库文件。
35 2
|
1月前
|
移动开发 Linux
Linux 文件与目录管理
Linux 文件与目录管理
27 3
|
2月前
|
Linux
深入理解Linux中的cp命令:文件与目录的复制利器
深入理解Linux中的cp命令:文件与目录的复制利器
|
2月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
下一篇
无影云桌面