linux进程可执行文件的绝对路径

这种情况很少遇到,我们需要一个运行中进程的绝对路径,可惜的是glibc中或者系统调用中我都没有找到类似的函数。但是linux绝对不会不给你这个机会的,那就是proc文件系统了。在proc文件系统中那些数字都是运行中的进程,进入一个文件名为数字的文件夹以后,我们就可以发现以下类似文件目录结构。

[cyher@cyher ~]$ ls /proc/3355/
attr             cpuset   io        mountinfo   pagemap      smaps    task
auxv             cwd      latency   mounts      personality  stack    wchan
cgroup           environ  limits    mountstats  root         stat
clear_refs       exe      loginuid  net         sched        statm
cmdline          fd       maps      oom_adj     schedstat    status
coredump_filter  fdinfo   mem       oom_score   sessionid    syscall

这里就是一个进程所有的信息了大名鼎鼎的ps命令就是读取这里的内容解析出信息的,这里是ps的官方网站 http://procps.sourceforge.net/

那好了,就用这里给的信息来解析出执行文件的绝对路径吧

/*
 * =====================================================================================
 *
 *       Filename:  get_exe_path.c
 *
 *    Description:
 *
 *        Version:  1.0
 *        Created:  2009年09月23日 17时07分17秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  cyher (), cyher.net@gmail.com
 *        Company:  cyher.net
 *
 * =====================================================================================
 */
 
#include
#include
#include
#define BUF 128
 
int main(int agrc, char **argv) {
    char buf[BUF];
    char proc[BUF];
    char *p;
 
    sprintf(proc, "/proc/%d/exe", atoi(argv[1]));
    readlink(proc,buf, BUF); /*proc/pid/exe 是一个链接,用readlink读*/
    p = strchr(buf,'('); /*读出的路径后面有可能会有 (deleted)字样,删去*/
    if (p != NULL) {
        p--;
        *p = '\0';
    }
    puts(buf);
}

这样就能读取出绝对路径了,不过你首先要知道pid啊 呵呵。

相关日志

三里屯, 遇见个小明星-朱珠

北京就是这样一个都市, 国际化, 你可以想象在东直门吃小吃的时候能够遇见罗大佑, 在国贸逛商场的时候遇见范冰冰. 但我从来就没想过, 以至于我把一个明星当美女给偷拍了…..真是惭愧…自己太不关心娱乐界了. 回来给别人看照片的时候, 朋友说, 这不是朱珠么, 我当场晕倒….我当时还说呢,这女孩这么有气质, 英文说的这么好, 顶一个. 结果…算了, 北京真邪门.

看看人家的明星照吧…

相关日志

原来苹果不会那么傻阿

话说apple 09.09.09的发布会 Rock n’ Roll,看来苹果选的日子也不错阿, 殊不知地球这边就一个北京就有近20000对情侣喜结连理. 发布会之前, 我又一个想法, 当3代touch配上3GS的处理器和内存, 还有摄像头和mic, 我就入个touch+any andorid手机来代替我的iphone. 哈哈, 可惜apple不会这么傻, 最起码没我这么梦幻. 这不是技术问题吧? Maybe,之前听说了touch有技术问题没有解决. 但我觉得, 这就是apple的经营理念, apple不傻, 真的出了个那么牛逼的touch, 除了打电话什么都和iphone一样了而价格又第很多, 人们确实都会像我一样 touch+any phone = iphone的. apple就是想告诉我们,我们的产品是没有完美的, 如果想完美,那价格也一定不是完美的, touch+phone ≠ iphone 3GS. 或许, touch+nano+phone = iphone 3GS,但是价格也是划等号的, 为什么我们不选又小又cool 的 iphone 3GS.

经过上面的分析, apple其实不会那么傻的, 他每次做产品, 定价和功能总能对应, 并且让你难以选择, 功能没有强大多少,但是你需要, 价格提高的幅度也让你难以抉择. 哈哈,到现在你就中了apple的心里陷阱了, 现在你明白了, 为什么果粉,总是有很多apple的设备, 但是这些东西从大体上看功能都差不多, 不得不说这是apple对发烧友的一种心里攻势. apple 总是让人又爱又恨.

等? 你错了, apple对等待他产品的人,会有更”严厉的惩罚”, 当你等到了 带设想头的touch的时候, iphone 3GS已经降价了或者出了个iphone 3G AS(Advanced Slim), 你到时候觉得疯了, 然后不顾一切的买了最新的 iphone 3G AS. 你的腰包被掏空, apple一样不少赚.

哈哈, 没事干分析自己的心情, 可能大多数人不会这样想,但是我见过的果粉,基本都是比我疯狂的.最后重申,只有一件apple的产品的绝对不是果粉, 因为如果你买了一件apple的东西,你会发现, 另一件产品和你有的这件原来配合的这么好,然后你就成了果粉,你不得不说apple东西好(确实也不错),要不你不是扇自己脸么.至于那些没有买第2件的, 你只是把iphone当成手机, touch当成mp4, nano当成mp3, mac当成pc了.

结束, 不能再说了,再说又开始给apple做广告了…….

相关日志

自己曾经作过的小实验

自己的嵌入式学习经验, 想不到别人给拍成视频了

见笑了….呵呵. 说的太年轻气盛了….别拍阿,我知错了.现在需要低调…呵呵.

相关日志