`
javahigh1
  • 浏览: 1215869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux下如何获取当前可执行文件的文件名

 
阅读更多

很多时候,我们会把资源文件放到可执行文件的相对位置,比如跟可执行文件放在一起。所以很有必要获得当前可执行文件的绝对路径,然后再找到资源文件的路径。

在Windows下,可以用GetModuleFileName来获得当前可执行文件的名字,但是Linux下这个情况就变的比较复杂。

首先,我没有发现类似的函数,只能用argv[0]来获得可执行文件名。开始Linux 下有link/symbol link这个恶心又可爱的东西,比如你可以把/usr/local/Evol3D/demo.exe ln 成/usr/bin/ev-bin 。这个时候,用户要是执行ev-bin 你就傻眼了。

经过我向高手的多天请教,终于发现一个简单的方法:

1. 当前程序运行的时候,你可以去读取/proc/self/exe, 这个文件就是当前进程的可执行文件的一个连接。 这个链接就是指向类似于GetModuleFileName的结果。这里特别感谢我前男同事:美丽的芳芳姑娘

2. readlink函数, readlink可以把连接的名字转成实际文件名。

注:本方法纯属个人创造,并在本人机器上测试正确,如有不当,敬请指教。

代码如下。

std::string _exeName = "/proc/self/exe";
size_t linksize = 256;
char exeName[256] = {0};
if(readlink(_exeName.c_str() , exeName, linksize) !=-1 )
{
_exeName = exeName;
}

printf("Application File name = %s!/n", _exeName.c_str());

分享到:
评论

相关推荐

    C语言编写虚拟文件系统

    (3) 最后应生成一个可执行文件“myfs”,在shell中运行后可模拟实现以下命令: a) ls:显示文件 b) create:创建文件 c) delete:删除文件 d) move:移动文件 e) shutdown:关闭系统 (4) 启动系统时打印出...

    linux教程——很使用的那种

    linux中的文件(普通文件或设备文件等)都必须有挂在点,只有挂载到一个目录下才能访问,swap分区是不需要挂载点的,在分区的时候,将文件系统类型选为swap,挂载点自动会变为灰色。一般linux中的swap大小为内存的两倍。...

    JoyCheungのLinux复习(包括Linux Mysql, Linux 系统, Linux 网络).rar

    -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别) -r 对目录反向排序。 -t 以时间...

    cmd操作命令和linux命令大全收集

    bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时) route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface arp ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    -n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。 4.应用技巧 在Linux 和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分...

    自己总结的Linux常用的基本命令

    64个常用的Linux命令。格式为: ls(LiSt):目录处理命令——显示目录文件 1)语法:ls [-ald] [文件... 1、对于文件:可以执行文件(命令/脚本) 2、可以进入目录 4)-:表示没有该权限 8、-i:显示每个文件的 i结点

    Linux操作系统基础教程

    一.Linux的文件系统结构.....................................................................................................6 二. 文件类型................................................................

    自己写的linux的ls指令

    (3) myls –l: 列出当前文件夹下普通文件的详细信息,包括文件模式,文件链接数,文件所属用户,文件所属用户组,文件大小,文件最后修改时间,文件名。并且在最后一行显示该目录下所显示的文件的文件块数。 例如...

    基础的Linux常用命令

    注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。 2. ls 查看目录或者文件的属*,列举出任一目录下面的文件 eg: ls /usr/man ls -l a.d表示目录(directory),如果是一个"-"表示是文件,如果...

    Linux命令笔记

    4:more 分页显示文件内容(只能往下翻页,不能往上反) 语法:more[文件名] 5:less 分页显示文件内容(上下翻页) 语法:less[文件名] 6:head 显示文件前面几行 语法:head[文件名] 7:tail 显示文件后面几行 语法:tail...

    LINUX 20招

    显示文件的类型 用命令file可以使你知道某个文件究竟是ELF格式的可执行文件,还是shell script文件或是其他的什么格式,例如:#file startx <br> 3.用dd命令转换数据格式 你大概知道dd命令是用来拷贝...

    Linux基本命令的使用

    16. 修改abc2的属性为:给其他用户增加可执行的权限。(使用功能模式) 17. 以长文件形式显示文件abc1的详细信息。 18. 进入/home目录,将文件abc1和abc2打包成文件ab.tar,放在以自己姓名命名的用户主目录下(比如/...

    shell脚本按当前日期输出日志的实现

    将以上脚本保存到test.sh脚本文件中,并赋予可执行权限:sudo chmod +x test.sh 执行脚本:bash test.sh 控制台输出: 输出到控制台,并且写入日志文件: 执行脚本,会在当前目录下生成 log20190826.log文件,打开...

    嵌入式系统/ARM技术中的Linux文件查找命令(四下)

    3. 可执行的操作 - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。 - ok 命令名称 { } 对符合条件...

    vim安装包,用于linux十分便捷

    ctrl+g 在窗口下方显示信息,告诉当前文件中的位置和文件名等 Ctrl+o 跳到上次光标位置 ‘’ 跳到上次光标位置,和ctrl+o不同,它只能和上一次光标位置和当前位置来回跳转 ctrl+i 和ctrl+o功能相反 m 有名标记...

    vi编辑器的使用,linux快速入门

    在系统图示字符下键入“vi”+“空格”+“文件名”,如:vi test.txt vi可以自动载入所要编辑的文件或是开启一个新文件。 2.退出vi 在指令模式下键入如下命令可以退出vi: :q 如果用户只是读文件的内容而未对文件...

    c语言实现最精简自动升级程序

    利用新浪云计算服务器提供的http服务,为自己写的c语言可执行文件提供自动升级服务。本程序精简最小化。 配置文件示例: ;FileShow [cfg] ;当前版本 Version = 1.0.3 ;升级文件总数量 Files = 1 ;文件1 [f1] ;...

    Unix系统操作命令

    -F 在目录文件后加’/’,在可执行文件后加’*’ -b 文件名中若有非打印字符,则用八进制显示该字符 -q 文件名中的打印字符用’?’表示 -i 显示节点号 -s 显示文件长度时使用块长度而非字节长度 -f 将后面的参数解释...

    Linux常用的命令。。。。。

    按下 SHIFT-G 键可以使得当前光标直接跳转到文件最后一行 /string 下搜索 shift +n 向上搜索 n 向下搜 ?string 上搜索 gedit + name 用来图形化编辑 rmdir 删除目录 rm 删除文件 sed 's/cat/dog/' cats 将cats ...

    linux.chm文档

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) ...rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 rpm -ivh /usr/src/redhat/RPMS/`...

Global site tag (gtag.js) - Google Analytics