如果不使用 sudo 运行,为什么这个带有 execl 的程序会中断?
Why this program with execl breaks if not run with sudo?
这是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.
不应该,您可能在第一个二进制文件中犯了一些错误。我在我的 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;
}
这是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.
不应该,您可能在第一个二进制文件中犯了一些错误。我在我的 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;
}