2015-04-14 40 views
0

這是diner_info程序:爲什麼使用sudo運行execl的程序會中斷?

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) { 
    printf("Diners: %s\n", argv[1]); 
    printf("Juice: %s\n", getenv("JUICE")); 
    return 0; 
} 

它被編譯成一個名爲diner_info

這裏是另一個程序:

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char *argv[]){ 
    char *my_env[] = {"JUICE=peach and apple", NULL}; 
    execle("diner_info", "diner_info", "4", NULL, my_env); 
} 

當我運行這個程序像這樣:

Korays-MBP:hello2 koraytugay$ sudo ./a.out 
Diners: 4 

沒問題......

但是當我不包括須藤我得到一個分段錯誤。爲什麼?

操作系統是OS X.

+0

如何編譯程序? – Cristik

+0

也許,你編譯'diner_info'爲root(sudo),普通用戶沒有權限執行它? 'ls -l diner_info'顯示什麼?你可以直接執行'diner_info'嗎?沒有任何問題嗎? –

+0

@Cristik gcc filename.c -o filename –

回答

2

它不應該,你可能與第一二進制做了一些錯誤。我在我的MAC和Ubuntu 14.04盒子上測試了它,並且兩個基本運行良好:

[email protected]:/tmp$ ./a.out 
Diners: 4 
Juice: peach and apple 

[email protected]:/tmp$ cat diner.c 
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char *argv[]){ 
    char *my_env[] = {"JUICE=peach and apple", NULL}; 
    execle("diner_info", "diner_info", "4", NULL, my_env); 
} 

[email protected]:/tmp$ cat diner_info.c 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) { 
    printf("Diners: %s\n", argv[1]); 
    printf("Juice: %s\n", getenv("JUICE")); 
    return 0; 
} 
相關問題