繁体   English   中英

如何知道Linux中C / C ++中的被调用程序路径?

[英]How to know the called program path in C/C++ in Linux?

我在/ usr / bin中有一个已编译的C程序说测试 ,在/ opt / python /中有一个python程序说pgm.py。 pgm.py中 ,我像os.system(“ test arg1 arg2”)一样调用C程序。 C程序是否可能知道/opt/python/pgm.py正在调用它?

其他操作系统界面将包含您想要的信息。 一种方法是让python程序将信息写入临时文件,然后将文件作为c行arg传递给C程序。

假设您使用的是类似于Linux的软件,则可以使用特定于平台的解决方案。 为简单起见,我使用Python脚本test.py代替了二进制文件。

pgm.py

#!/usr/bin/env python
import os

os.system('python test.py')

test.py

#!/usr/bin/env python
import os, errno

pid = os.getpid()

while 1:
    try:
        pid = int(open('/proc/%d/stat' % pid).read().split()[3])
        cmd = os.readlink('/proc/%d/exe' % pid)
        args = open('/proc/%d/cmdline' % pid).read().split('\0')
    except OSError as e:
        if e.errno == errno.EACCES:
            print 'Permission denied for PID=%d' % pid
            break
        raise
    print pid, cmd, args
    if pid == 1:
        break

运行pgm.py ,我得到输出...

341 /bin/dash ['sh', '-c', 'python test.py', '']
340 /usr/bin/python2.7 ['python', './pgm.py', '']
13888 /bin/bash ['-bash', '']
Permission denied for PID=13887

所以,你可以测试使用一个简单的对比test其做类似的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM