2016-03-07 27 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