『APUE自学笔记』进程环境

深入理解UNIX环境编程之apue.h使用指南 本文还有配套的精品资源,点击获取 简介:在UNIX系统编程中, apue.h 提供了一组封装的UNIX标准函数和系统调用,用于简化编程任务。这个头文件出自《Advanced Programming in the UNIX Environment》一书,对于学习UNIX环境编程至关重要。使用 apue.h 能提高编程效率并加深对UNIX系统原理的理... 阅读详情

启动代码

C程序运行时,最开始运行的是启动代码,启动代码再去调用main函数,然后整个C程序都已运行。
由编译器提供的,一般有两种提供方式:①源码、②二进制(gcc采用这种)
gcc -v [文件名] 可以查看gcc编译链接的详细情况时,可以看到有很多*.o,这些 .o文件就是gcc提供的启动代码。

启动代码由汇编语言编写

在程序的内存空间结构还没有布局起来之前,高级语言程序还无法运行,此时只能使用汇编,当利用汇编编写的启动代码将高级语言的内存空间结构建立起来后,自然就可以运行c/c++等高级语言的程序了。

启动代码做了什么事

  1. 对c程序的内存空间进行布局,得到c程序运行所需要的内存空间结构

比如从c内存空间中划出一段空间,以“栈”的形式来管理。

  1. 留下相应库接口

如果程序使用的是动态库的话,编译时,动态库代码并不会被直接编译到程序中,只会留下相应的接口,程序运行起来后,才会去对接库代码,为了能够对接动态库,启动代码会留下动态库的对接接口。

进程的终止方式

进程终止方式有两种,一种是正常终止(主动),另一种是异常终止(被动)。

正常终止:

  1. main中调用return关键字

return关键字的作用是返回上一级函数,如果main函数的子函数调用return的话,返回的上一级是main函数。如果main函数调用return的话,main函数所返回的上一级是启动代码。main函数调用return有两种方式:
(a)显式调用
比如:return [返回值];
返回值的意义:返回值标记的了退出状态,比如一般情况下。
  return 0:正常结束
  return -1:代表了某种操作失败
  return -2:代表了另一种的操作失败
  值的具体意义由开发者规定。使用echo $?可以查看程序运行后的,main函数的返回值。如果main函数没有返回值,查询的结果为main函数中最后一次调用的子函数的返回值。
(b)隐式调用:不写出return,当main函数中的最后一句代码执行完毕后,会默认的调用return返回0。

  1. 程序任何位置调用exit函数(库函数)

其实,main函数调用return返回到启动代码后,启动代码也是调用exit函数来实现正常终止的。main函数调用return将返回值返回给启动代码后,启动代码又会调用exit(返回值)。

  1. 程序任何位置调用_exit函数(系统调用)

exit是对_exit的封装。_exit用法与exit一样。

异常终止

被信号强制终止,这就是异常终止。

(a) 自杀:自己调用abort函数,自己给自己发一个SIGABRT信号将自己杀死。
(b) 他杀:由别人发一个信号,将其杀死。

atexit函数(库函数)

子函数中也可使用,但一般在main中使用。
功能:注册(登记)进程正常终止时的处理函数,参数就是“进程终止函数”的地址。

进程终止处理函数的注册顺序和调用顺序刚好相反。调用atexit注册时,会将“进程终止处理函数”的函数地址压入进程栈中,当进程正常终止时,又会自动从栈中取出函数地址,并执行这个函数,实现进程的扫尾操作。

在两种情况下,登记的进程终止处理函数不会被调用:

(a)异常终止,不会调用。
(b)直接调用_exit来正常终止时,不会调用。

登记“进程终止处理函数”有什么意义?

有的时候需要在进程正常终止时做一些扫尾操作,比如释放内存相关的操作。如果不注册进程终止处理函数的话,需要在每次程序正常终止前编写相应的扫尾代码,很繁琐。

进程从启动 到 正常终止的全过程


为什么调用exit、return正常终止时,会刷新标准io的缓存?

因为exit会调用fclose关闭所有的标准io。而调用fclose关闭标准IO时,会自动调用fflush()刷新数据。

将命令行参数传递给main函数形参的过程

./a.out *** *** ——> 终端窗口进程(构建指针数组) ——> OS 内核 ——> 启动代码 ——> main函数形参

环境变量表

每一个进程都在自己的内存空间中保存了一份自己的环境变量表。这个环境变量表的内容来自于环境变量文件。

对环境变量表的修改

  1. 永久修改(直接修改环境变量文件)
  2. 临时修改(只对当前进程有效)

临时修改环境变量表的两种方式

1.命令行(只对终端窗口有效)

(a)查看:export 或 echo $[key]
(b)添加:export [key]=[value]
(c)修改:export [key]=[value] 或 export [key]=$[key]:[value]
(d)删除:unset [key]

2.调用API

int putenv(char *string);
int setenv(const char *name, const char *value, int overwrite);
int unsetenv(const char *name);

进程的环境表是怎么来的

使用命令行窗口执行./a.out,那么a.out进程就属于“命令行窗口进程”的子进程,子进程的环境表是从父进程复制得到的。所以所有进程的“环境变量表”都是从父进程复制得到的,最原始进程的“环境变量表”则是从“环境变量文件”中读到的。

IEC103协议实战指南:报文解析与传输优化策略 本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。 阅读详情

相关推荐

字节开源 DeerFlow 2.0:从 Deep Research 到 Super Agent Harness 的进化之路

GitHub Trending 冠军项目,字节跳动完全开源的超级智能体框架。支持子代理、沙箱执行、长期记忆、技能扩展,可完成从几分钟到几小时的复杂任务。本文深度解析架构设计、安装实战、技能系统,并附上独家配置指南。

qq_38610923的博客 1710

【APUE】文件系统 — 进程环境

APUE第七章

yangjihua的个人笔记博客 681

Anaconda下安装LabelImg

Anaconda下安装LabelImg

LYH8543的博客 756

【Linux C | 进程】进程环境 | 什么是进程?进程的开始、终止、存储空间布局、命令行参数、环境变量

本文介绍了什么是进程,进程的开始、结束,还有程序的存储空间布局,以及在main函数来获取命令行参数;最后结束环境表、环境变量。

wkd_007的博客 1396

Trae CN 使用入门指南

【代码】Trae CN 使用入门指南。

weixin_42551921的博客 8765

H无穷控制学习笔记——加权灵敏度H无穷控制问题

一、加权灵敏度H无穷问题 系统结构如上图所示。被控对象P的状态空间方程为(Ap,Bp,Cp,DpA_p,B_p,C_p,D_pAp​,Bp​,Cp​,Dp​),加权函数W1的状态空间方程为(A1,B1,C1,D1A_1,B_1,C_1,D_1A1​,B1​,C1​,D1​),加权函数W2的状态空间方程为(A2,B2,C2,D2A_2,B_2,C_2,D_2A2​,B2​,C2​,D2​),加权函数W3的状态空间方程为(A3,B3,C3,D3A_3,B_3,C_3,D_3A3​,B3​,C3​,D3​)。

一饮丶一啄的博客 4349

UNIX高级编程【深入浅出】 进程环境(上)

进程的基本状态 linux中c程序是如何启动和终止的

weixin_51984896的博客 748

基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端

【代码】基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端。

weixin_42300449的博客 165

【Linux】—— 进程的环境变量

进程的环境变量

m0_56069910的博客 1482

AI视频生成工作流开发:从产品拆解到带货视频全流程实现

本文介绍了一套完整的AI视频生成工作流开发方案,该系统能够自动分析产品素材并生成9个标准化分镜,支持白底图智能替换,最终输出专业带货视频。系统基于Coze平台搭建,整合豆包大模型及多模态生成模型,实现从产品分析、脚本生成到视频合成的全流程自动化。关键模块包括产品特征提取、智能分镜分配、视觉内容生成和用户交互调整,支持手动优化提示词和输出结果。该方案采用模块化设计,结合多种AI模型协同工作,为电商视频制作提供高效解决方案。

huanghm88的专栏 384

ResNet改进(50):SKConv和CBAM增强的ResNet模型

动态调整感受野大小- 结合通道和空间注意力模型的核心思想是在ResNet的每个残差块后插入这些注意力模块,使网络能够自适应地关注更重要的特征。模型的核心是类,它在标准ResNet34的基础上:替换了初始卷积层,使用更小的核(3×3)和步长(1)在每个残差块后选择性添加SKConv和CBAM模块# 加载预训练ResNet34# 自定义初始层# 添加注意力机制的残差层通过集成SKConv和CBAM,这个改进的ResNet模型能够更有效地捕捉多尺度特征并关注关键信息区域。

2401_82355416的博客 620

进程环境和进程控制

进程环境和进程控制

learning_ape的博客 190

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我们接下来详细分析。在开始解析之前我们先准备两个文件,一个是控制LED闪烁的文件,通过更换引脚约束可以控制不同LED,这样就可以指示是启动MultiBoot位流还是Golden位流。还有一个文件就是uart发送文件,会指示启动的位流格式和启动地址。文件都比较简单,就不列举了,文件详见文后的链接。对于 IPROG 指令目前有三种实现方式,分别为:1)通过约束脚本添加;2)通过ICAPE2原语

OpenFPGA的博客 2104

【APUE】笔记之——进程控制

《APUE》第八章,之进程控制笔记。 1. 进程标识符      Unix/Linux中每个进程都有一个非负整数表示的唯一进程ID。ID唯一,但可以重用,大多数unix使用延迟重用算法,使得赋予新建进程的ID不同于最近终止进程所使用的ID。     系统中有一些专用进程。ID为0的进程是调度进程,常常被称为交换进程。该进程是内核的一部分。进程ID是1的通常是init进程,在自举过程结束时有内

WuChangsong的博客 584

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

APUE学习笔记-汇总

APUE学习笔记(1)-限制查询APUE学习笔记(2)-errno变量APUE学习笔记(3)-时间概念APUE学习笔记(4)-文件共享APUE学习笔记(5)-设置用户IDAPUE学习笔记(6)-创建进程APUE学习笔记(7)-僵死进程APUE学习笔记(8)-执行程序

5542

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《APUE》笔记-第七章-进程环境

1.引言 重要知识:命令行参数、环境变量(环境指针、环境表、环境字符串)、进程终止方式、c程序的启动和终止、c程序的存储空间布局、setjmp、longjmp、进程资源限制 2.main函数 int main(int argc, char *argv[]);//有 argv[argc] = NULL; 执行一个新程序的过程:bash->fork()->子shell->exec()->装入新

ZX714311728的博客 580

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

APUE笔记(1):配置APUE环境

本人用的是CentOS6.5版本的linux 写这个环境配置是因为自己这一天被这个环境配置给搞的很难受 首先,我们在linux下找一个文件夹,存放APUE3的包: cd /home/src wgethttp://www.apuebook.com/src.3e.tar.gz 然后解压 tar -zxv -f src.3e.tar.gz 进入apue.3e文件夹 cd /home/...

Start_to_crazy的博客 676

APUE学习记录——进程环境

一、进程相关概念 1、什么是进程?   通俗的说,进程是一个具有一定独立功能的程序的一次运行活动。,对于Linux这种多任务操作系统来说,每一个运行者的程序就构成一个进程,可以用cat /proc/sys/kernel/pid_max命令查看系统支持的最大进程数,我在Ubuntu14.04中得到的结果是32768。 2、进程与程序的区别与联系 (1)进程是动态的,程序是静态的 (2)一个

原野追逐 631

APUE学习:第七章 进程环境

相当于一个存放函数的栈(先入后出),栈中存放的函数不能带参数且最大容量为32,调用atexit函数 可以把一个不带参数的函数放入栈,那么什么时候出栈呢?databuf数组是一个自动变量,它开辟在函数open_data的栈帧中的一块区域,fp流指针指向该区域,但是函数返回之后,open_data的栈帧就被系统收回了。对于普通的自动变量,很明显是清除的(自动变量保存在栈帧中,你栈帧都没了,自动变量不可能保存的)全局变量、静态变量和易失变量不受优化的影响,在longjmp之后,它们的值为最近所呈现的值。

weixin_44155149的博客 1211

『APUE自学笔记』进程控制

三个特殊进程 PID==0(调度进程) 作用:实现进程间的调度和切换,该进程会让CPU轮换的执行所有的进程。 OS启动起来后,最后有一部分代码会持续的运行,这个就是调度的进程。由于这个进程是OS的一部分,凡是由OS代码演变来的进程,都称之为系统进程。 PID==1(init进程) 作用1:初始化。他会去读取各种各样的系统文件,使用文件中的数据来初始化OS的启动。 作用2:托管孤儿进程...

Replus_的博客 242

使用Ubuntu搭建apue环境的绝佳姿势,附带一系列工具操作

主要为研究国外知名计算机课程CS631 - APUE,配合《UNIX环境高级编程》一书。目的在于更好的了解类Unix下系统编程,搭建环境不限于APUE编程,可应用更多的场景。

totomiz的博客 744

apue 笔记 -第7章 进程环境

第七章 进程环境 内存布局 通过size 查看 text段,data段,bss段大小 kali@kali:~/Desktop/Linux Study/Hellos$ size /usr/bin/cc text data bss dec hex filename 757686 8528 14512 780726 be9b6 /usr/bin/cc 获取环境变量 getenv #include <stdlib.h> #inclu

DXT的博客 293

APUE笔记-第七章进程环境

第七章第八章第九章第十章。

weixin_48563088的博客 281

APUE实战篇1:在Ubuntu环境搭载apue的环境

看了好几天的《UNIX环境高级编程》(即APUE),懵懵懂懂,为了能找到一种好的方法提高学习效率,在网上看了很多前辈的帖子,原来可以在Ubuntu环境下实战训练,即搭载APUE的环境,所以二话不说,立马搭载了该环境,以下是相关教程。 说实话,搞这东西要有一定的Linux基础,什么gcc编译器,vim文本编辑器,常用的命令(例如:mv、cd、ls等等)都是需要知道的,如果还不会的伙伴去看看《Linux鸟哥的私房菜》,了解一下Linux吧。 第一:环境要求 安装好虚拟机VMware(我的是15版本),并且安装U

weixin_45880057的博客 707

APUE进程环境小结

一.main函数是如何被调用的        内核执行C程序时,在调用main函数前先会调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用 main函数做好安排。    二.进程的八种终止方式 1.     从main返回 2.     调用exit 3.     调用_exit或_Exit 4.

skctvc15的专栏 633

APUE第7章 进程环境

1、概述 i、当程序执行时,main函数如何被调用;ii、命令行参数如何传递给新程序;iii、典型C程序的存储空间布局;iv、如何分配另外的存储空间(利用malloc、calloc、realloc及free函数);v、进程如何使用环境变量;vi、进程的7种不同终止方式;vii、longjmp和setjmp函数及它们与栈的交互作用;viii、查看进程资源限制。 2、main函数 C程序是从ma...

爱吃_宫爆鸡丁 396
上一篇: 『APUE自学笔记』文件IO
下一篇: 『APUE自学笔记』进程控制
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值