2016-03-07 28 views
1

当我执行程序./test -debug 7 -m播放器时,我使用C语言如何获取-m -debug的参数值?linux如何用pid获取进程参数?

我曾尝试:

char* name = (char*)calloc(1024,sizeof(char)); 
if(name){ 
    sprintf(name, "/proc/%d/cmdline",pid); 
    FILE* f = fopen(name,"r"); 
    if(f){ 
     size_t size; 
     size = fread(name, sizeof(char), 1024, f); 
     if(size>0){ 
      if('\n'==name[size-1]) 
       name[size-1]='\0'; 
     } 
     fclose(f); 
    } 
} 

但它只返回process.exec的名字 “xargs的-0 <的/ proc/PID/CMDLINE” 可以返回正确的值(mytest的-debug 7 -m我希望进入另一个进程,而不是进程的主要方法。例如,在进程mytest2中,我想用pid(通过pid = getpid()和通过pid获取mytest进程调试值get mytest进程信息,并获取调试值)。

+2

'getopt'可以帮助你http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html – Garf365

+0

对不起,我想进入另一个进程,而不是进程的主要方法。 – lyric

+0

请问您可以提供一些关于您的问题的更多细节。你是否试图在程序y中传递给程序x的参数? –

回答

2

PROC(5)

的命令行参数显示在此文件作为一组由(“\ 0”)的空字节分隔的字符串 的,与后一个进一步空字节 最后一个字符串。

所以,这个代码应工作:

for (i = 0; i < size; i++) { 
    if (!i) 
     printf("%s\n", name); 
    else if (!name[i - 1]) 
     printf("%s\n", name + i); 
} 
+0

我试过size = fread(name,sizeof(char),1024,f),但只返回“./test”。 – lyric

+0

它真的只返回“./test”,还是返回“./test”后跟一个空字节后面跟着更多的数据,但是你只看到“./test”是因为你用printf打印了它? –

+0

是的,我用printf打印了它,我怎么才能得到正确的值? – lyric