[英]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.