【前言】

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

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

linux下获取程序所在目录绝对路径相关推荐

  1. linux 下获取程序的绝对路径

    环境: linux/unix , c++, gcc 有时候我们需要获得程序的绝对路径.功能类似于 pwd. 系统提供了一个 getcwd() 函数,但获得的不一定是程序的绝对路径. 下面的代码实现了获 ...

  2. Qt实现 获取程序所在的各种路径

    在对文件做操作时,,虽然我们知道文件的路径所在,但是程序并不知道,所以这时候必不可少的需要获取文件所在的路径以方便打开它的文件IO流, 以及调用第三方软件的时候也需要获取该exe所在的位置.如果我们通 ...

  3. linux下获取程序启动时间,c 实现

    要获取一个程序启动那个时刻的时间,可以用下面的方法: 一.一般的方法是用 ps 命令 ps -eo pid,lstart,comm | grep redis 参见 linux下查看进程启动.运行的时间 ...

  4. qt 获取当前程序运行路径_Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法...

    Qt 程序获取程序所在路径.用户目录路径.临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径.用户目录路径.临时文件夹等.在 Qt 中实现这几个功能所用的方法虽然都 ...

  5. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

    Qt 程序获取程序所在路径.用户目录路径.临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径.用户目录路径.临时文件夹等.在 Qt 中实现这几个功能所用的方法虽然都 ...

  6. linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间

    1 linux上根据运行程序的进程号,查看程序所在的绝对路径 1.如下,我想查看python 25_run_train_tripletloss_sknet_8w_offline_c_plus.py 这 ...

  7. Windows守护进程实现/设置程序图标/隐藏黑窗/获取exe所在目录/设置开机自启动

    功能:实现一个windows守护进程,设置有自定义图标,启动后隐藏黑窗口,获取exe所在目录,并设置开机自启动(需要以管理员权限运行).如果需要打包成可执行的安装包程序,见另一篇博客:https:// ...

  8. linux怎么获取当前路径,linux 下获取当前工作路径的实例

    获取工作路径这里介绍两种方法: 1.使用getcwd()函数. 头文件:#include 定义函数:char * getcwd(char * buf, size_t size); 函数说明:getcw ...

  9. MFC获取应用程序所在目录--CString(Left、Right、Find、ReverseFind)--Cstring与char或wchar转换

    一.CString--Left.Right.Find.ReverseFind CString--Left.Right.Find.ReverseFind CString::Left(intnCount) ...

  10. linux存放脚本目录,linux中Shell脚本所在目录的绝对路径linux操作系统 -电脑资料...

    linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取:代码如下复制代码 baseDirForScriptSelf=$(cd & ...

最新文章

  1. python web页面输出_python+socket+jq实现web页面实时输出结果
  2. 图解Oracle 12c创建数据挖掘(Data Miner)用户dmuser
  3. oracle report builder 6i下载,oracle report builder 6i - 数据模型中的SQL查询代码
  4. linux下编译ios,为iOS安装OpenCV
  5. 06-对图像进行腐蚀操作
  6. windbg学习----r?
  7. 杭电1422 重温世界杯
  8. 花书+吴恩达深度学习(八)优化方法之 Batch normalization
  9. java8 list map 分组_java8 List转Map,并进行分组过滤求和等操作
  10. 链式添加_涂料导电炭黑添加量
  11. 【DL小结1】DL入门
  12. docker修改redis配置文件
  13. Oracle项目管理系统之合同控制概述
  14. 流媒体:浅谈传统媒体—流媒体—加P2P的流媒体的演变之路
  15. Service: 三、小窗口(浮窗) 播放视频
  16. cocos2dx 圆盘抽奖_cocos2d编写的类似幸运大转盘抽奖源码
  17. ARM汇编之kile环境
  18. java项目---探花交友
  19. 解决Angular里的报错:ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError()
  20. 2013年3月山东综合性网站及社区网站 综合影响力排名

热门文章

  1. Secondary Namenode工作机制详解
  2. 数据库系统:NoSQL与SQL的区别
  3. Tensorflow:模型保存和服务
  4. 解压zip报错_Get新技能!利用Python自动解压各种压缩文件
  5. 力扣-543. 二叉树的直径
  6. 【报错】Error inserting GREEM=30 YELLOW=4 RED=5 android.database.sqlite.SQLiteException: no such tab
  7. 一个网卡设备配置两个不同网段的IP地址
  8. 服务站: WCF 消息传递基础 -- MSDN Magazine, April 2007
  9. 微服务深入浅出(4)-- 负载均衡Ribbon
  10. TCP三次握手四次挥手介绍