c - 如果不使用 sudo 运行,为什么这个带有 execl 的程序会中断?

标签 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。

最佳答案

它不应该,您可能在第一个二进制文件中犯了一些错误。我在我的 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;
}

关于c - 如果不使用 sudo 运行,为什么这个带有 execl 的程序会中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634805/

相关文章:

c - 操作系统使用堆来实现动态内存管理的数据结构?

linux - Web服务器至少应该具备哪些功能?

linux - 如何动态增加进程的堆栈大小

在 Mac OS X 虚拟环境中安装 Python,其中包括我可以包含到 Xcode 中的框架?

java - 当我刷新浏览器时看不到变化 - Java EE Web 应用程序。 + Glassfish 4 + Netbeans + Java 7 + Mac 操作系统-

macos - 如何检查音频设备是否是聚合体

c - 将字符串拆分为 block 。

c - Ruby 和 C 之间的主要区别

C - 在非结构或 union 中请求成员 ‘x’

linux - 比较两个文件并仅在不匹配时将输出存储在文件中