加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C如何将命令行参数转换为数组?

发布时间:2020-12-16 10:32:02 所属栏目:百科 来源:网络整理
导读:我想C实际上如何将命令行参数转换为char数组?什么“秘密”代码这样做?我在哪里可以查看执行此操作的代码(即使它在汇编中,我知道一些汇编)?我正在使用 Linux,如果这有帮助的话. 谢谢 解决方法 管理命令行参数并在进程创建期间将其放入堆栈是一项操作系统工
我想C实际上如何将命令行参数转换为char数组?什么“秘密”代码这样做?我在哪里可以查看执行此操作的代码(即使它在汇编中,我知道一些汇编)?我正在使用 Linux,如果这有帮助的话.

谢谢

解决方法

管理命令行参数并在进程创建期间将其放入堆栈是一项操作系统工作.

对于POSIX系统,执行路径是:

>在程序中调用execle / execve / …系统调用,将路径传递给新的进程可执行文件和命令行参数.
>这些数据转到内核
>内核更新其内部结构以考虑新的进程标识,并为新进程分配地址空间(如果不再需要,内核也会清除旧的地址空间).内核用零初始化进程内存,将信息从旧内存复制到堆栈顶部的新地址空间.
>内核将新进程放入调度队列并从exec()系统调用返回,将执行路径传递到用户空间并最终传递到进程的入口点(这通常是来自crt0.o对象文件的例程,这是默认情况下链接到每个可执行文件 – 此例程调用main()).

对于Linux,您可以在此处查看此代码:
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/fs/exec.c#L383:

383 /*
384  * 'copy_strings()' copies argument/environment strings from the old
385  * processes's memory to the new process's stack.  The call to get_user_pages()
386  * ensures the destination page is created and not swapped out.
387  */

在用户空间execve()系统调用的do_execve()内核对应部分,在第1345行,调用copy_strings(),copy_strings()例程实际上完成了你所询问的工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读