首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >argc从何而来?

argc从何而来?
EN

Stack Overflow用户
提问于 2012-01-21 22:52:57
回答 4查看 315关注 0票数 2

fork/exec创建了一个新进程。Exec设置了命令行参数,但我没有看到它设置了要放入argc中的这些参数的数量。

main()应该是在新进程中运行的第一个函数,但此时argc已经设置好了。

它设置在哪里?在调用main之前,它必须是某种对参数进行计数的设置代码,但是我读过的任何东西都没有解释这个设置代码做了什么事情,或者它驻留在哪里。

这是libc格式的吗?这是不是在每个操作系统上都是一样的,并且被一些规范所覆盖?除了这个之外,我在哪里可以找到安装代码中发生的事情?是在实例化全局变量之前调用的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-21 22:55:37

在调用main之前,在大多数实现中都会发生很多事情(通常是由类似于C运行时启动程序crt0的环境设置的)。

main退出之后还可能发生很多事情,比如资源关闭、atexit退出处理程序等等。

C标准实际上只涵盖了在语言方面发生的事情,而不是实现如何在幕后工作(这基本上就是您所问的)。每个实现可能以不同的方式执行操作,但是许多UNIX类型都会有类似于前面提到的crt0的东西,它执行设置。

票数 6
EN

Stack Overflow用户

发布于 2012-01-21 22:55:19

操作系统会处理它。毕竟,它是处理线程和进程的操作系统。

票数 0
EN

Stack Overflow用户

发布于 2012-01-21 22:58:22

使用fork会导致在下一行代码中继续。Exec函数族创建一个新的执行,这取决于您在其中使用的函数的第二个参数可能是参数数组。

代码语言:javascript
复制
#include <unistd.h>


int ret;
char *cmd[] = { "ls", "-l", (char *)0 };
char *env[] = { "HOME=/usr/home", "LOGNAME=home", (char *)0 };
...
ret = execve ("/bin/ls", cmd, env);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8953914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档