Unix编程第7章 进程环境

准备雄心勃勃的看完APUE,但是总感觉看着看着就像进入一本字典,很多地方都是介绍函数的用法的,但是给出例子远不及函数介绍的多。而且这本书还是个大部头呢。第7章的讲的进程环境,进程是程序设计中一个比较重要的概念,知道倒是知道它的大概意思,但是其实还是有很多的细节其实都没有深究,这章呢APUE就带着我们逛了一下如下的几个主题(尼玛,学C语言的话,学那点语法其实不是很重要,反而经常把时间浪费在语法的蹩脚处):

1、程序执行的时候main函数是如何被调用的

2、命令行参数是如何传递给新程序的;

3、典型的存储空间的布局是什么样的;

4、如何分配另外的存储空间;关于C中可执行程序的存储空间布局在我的博客《深入理解C语言内存管理》中有很详细的介绍,参考了很多不同资料

5、进程如何使用环境变量;

6、进程的各种不同的终结方式;

7、还说明了longjmp和setjmp函数以及它们与栈的交互作用;

时间: 2024-10-12 20:39:45

Unix编程第7章 进程环境的相关文章

《Unix环境高级编程》读书笔记 第7章-进程环境

1. main函数 int main( int argc, char *argv[] ); argc是命令行参数的数目,包括程序名在内 argv是指向参数的各个指针所构成的数组,即指针数组 当内核执行C程序时(使用exec函数),在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接器设置的,而连接器则是由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后按上述方式调用main函数做好安排. 2. 进程终止 有8种方式使进程终止,其中5种

APUE学习笔记:第七章 进程环境

7.1 引言 本章将学习:当执行程序时,其main函数是如何被调用的:命令行参数是如何传送给执行程序的:典型的存储器布局是什么样式:如何分配另外的存储空间:进程如何使用环境变量:各种不同的进程终止方式等:另外还将说明longjmp和setjmp函数以及它们与栈的交互作用:还将介绍研究进程的资源限制 7.2 main函数 C程序总是从main函数开始执行.当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编

第5章 进程环境(3)_环境表和环境变量

3. 环境表 (1)每个进程都有一个独立的环境表(字符指针数组) (2)初始的环境表继承自父进程 (3)两种访问方式: ①int main(int argc, char* argv[], char* envp[]);  //第3个参数 ②extern char** environ;   //全局变量 4. 环境变量操作函数 (1)getenv:获取环境变量值 头文件 #include<stdlib.h> 函数 char* getenv(const char* name); 返回值 指向与nam

第5章 进程环境(4)_进程资源限制

5. 进程资源限制 (1)getrlimit.setrlimit函数 头文件 #include<sys/resource.h> 函数 int* getrlimit(int resource, struct rlimit* rlptr); 返回值 成功返回0,出错返回非0 功能 获得资源限制,存放在rlptr指向的结构体中 参数 (1)rlimit结构体 struct rlimit{ rlim_t rlim_cur; //软限制:当前限制 rlim_t rlim_max; //硬限制:rlim_

UNIX环境高级编程第8章进程控制 8.3fork 文件共享 vfork

#include "apue.h" /* syj 20140112 */ int glob = 6; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void) { int var; /* automatic variable on the stack */ pid_t pid; var = 88; if (write(STDOUT_FI

UNIX高级环境编程(8)进程环境(Process Environment)- 进程的启动和退出、内存布局、环境变量列表

在学习进程控制相关知识之前,我们需要了解一个单进程的运行环境. 本章我们将了解一下的内容: 程序运行时,main函数是如何被调用的: 命令行参数是如何被传入到程序中的: 一个典型的内存布局是怎样的: 如何分配内存: 程序如何使用环境变量: 程序终止的各种方式: 跳转(longjmp和setjmp)函数的工作方式,以及如何和栈交互: 进程的资源限制 ? 1 main函数 main函数声明: int main (int argc, char *argv[]); 参数说明: argc:命令行参数个数

第5章 进程环境(2)_进程的启动和终止

2. 进程启动和终止 2.1 C程序启动过程 (1)启动例程 ①是一段程序代码,放置在/lib/libc.so.***中.编译器在编译时会将启动例程的代码编译进可执行文件中. ②可执行程序将这段嵌入的启动例代码指代为程序的起始地址. ③当内核执行C程序时(使用exec函数),在调用main前先执行启动例程代码. (2)启动例程的作用 ①搜集命令行的参数传递给main函数中的argc和argv ②搜集环境信息构建环境表并传递给main函数 ③登记进程的终止函数 2.2 进程终止   进程终止 主要

APUE学习笔记(第七章 进程环境)

本章将了解进程的环境. main函数 C程序总是从main函数开始执行,main函数的原型是: int main(int argc,char *argv[]); 其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组. 进程终止 3个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理(对于所有打开流调用fclose函数),然后返回内核. #include <stdlib.h> void exit(int status); void _

第5章 进程环境(5)_非局部跳转

6. 非局部跳转 (1)setjmp和longjmp语句 头文件 #include<setjmp.h> 函数 int* setjmp(jum_buf env); 返回值 直接调用返回0,若从longjmp调用返回则返回非0值 功能 设置非局部跳转的跳转点   函数 void longjmp(jmp_buf env, int val); 功能 进行非局部转转,val为返回值 参数 env:一个特殊类型jmp_buf.这一数据类型是某种形式的数组,其中存放在调用longjmp时能用来恢复栈状态的信