为什么这个带有execl的程序如果没有运行sudo就会中断?

时间:2015-04-14 18:27:41

标签: c linux macos unix exec

这是 diner_info 计划:

#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

没问题......

但是当我不包含 sudo 时,我遇到了分段错误。为什么呢?

操作系统是OS X.

1 个答案:

答案 0 :(得分:2)

它不应该,你可能在第一个二进制文件中犯了一些错误。我在我的MAC和Ubuntu 14.04盒子上测试了它,两个基本运行正常:

brenohl@sid:/tmp$ ./a.out 
Diners: 4
Juice: peach and apple

brenohl@sid:/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);
}

brenohl@sid:/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;
}