Linux系统编程学习之《进程环境》
2013-08-23 13:49
113 查看
众所周知,C程序的入口是main函数,其标准main函数原型是如下所示的:
int main(int argc,char * argv[]);
argc是命令行参数的数目,argv是参数的指针
已个C进程的终止方式如下,其中5种为正常终止:
1.从main返回
2调用exit
3.调用_exit或_Exit
4.最后一个线程从其启动例程返回
5.最后一个线程调用phread_exit
异常终止有3种方式,分别是:
6.调用abort
7.接收到一个信号并终止
8.最后一个线程对取消请求作出响应
1.exit函数
exit函数用于退出程序,它有多个函数,原型如下:
2.atexit函数
有时候我们需要能在退出时处理一些工作,就需要调用该函数
3.malloc,calloc和realloc函数
当我们需要动态分配内存时就要用到如下函数:
4.环境变量
环境变量会对我们某些函数有影响,如何设置他们和获取他们,函数如下:
5.setjmp和longjmp函数
由于goto语句只能在函数内跳转,若要函数之间跳转,则要用setjmp和longjmp
6.getrlimit和serlimit函数
每个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit函数查询和更改
int main(int argc,char * argv[]);
argc是命令行参数的数目,argv是参数的指针
已个C进程的终止方式如下,其中5种为正常终止:
1.从main返回
2调用exit
3.调用_exit或_Exit
4.最后一个线程从其启动例程返回
5.最后一个线程调用phread_exit
异常终止有3种方式,分别是:
6.调用abort
7.接收到一个信号并终止
8.最后一个线程对取消请求作出响应
1.exit函数
exit函数用于退出程序,它有多个函数,原型如下:
/* * #include <stdlib.h> * void exit(int status); * void _Exit(int status); * #include <unistd.h> * void _exit(int status); * 三个函数的status都是指终止(退出)程序的返回值 */
2.atexit函数
有时候我们需要能在退出时处理一些工作,就需要调用该函数
/* * #include <stdlib.h> * int atexit(void (*func)(void)); * 成功返回0,出错返回非0 * 该函数用于登记一些调用exit等函数时需要处理的终止函数,ISO-C要求最少可以注册32个 */
3.malloc,calloc和realloc函数
当我们需要动态分配内存时就要用到如下函数:
/* * #include <stdlib.h> * void * malloc(size_t size); //返回size字节连续存储空间 * void * calloc(size_t nobj,size_t size); //返回size*nobj字节连续存储空间 * void * realloc(void * ptr,size_t newsize); //将ptr指向的内存空间调整为newsize大小 * ------------------------------------------ * 三个函数成功返回非空指针,出错返回NULL * ------------------------------------------ * void free(void * prt); //释放ptr指向的动态分配存储空间 */
4.环境变量
环境变量会对我们某些函数有影响,如何设置他们和获取他们,函数如下:
/* * #include <stdlib.h> * char * getenv(const char * name); //成功返回与name关联的value的指针,未找到则返回NULL * int putenv(char * str); //以"name = value"形式吧str字符串放到环境表中 * int setenv(const char * name,const char * value,int rewrite); //将name设置为value;rewrite非0,删除现有定义,为0,不删除现有定义 * int unsetenv(const char * name); //删除name的定义 */
5.setjmp和longjmp函数
由于goto语句只能在函数内跳转,若要函数之间跳转,则要用setjmp和longjmp
/* * #include <setjmp.h> * int setjmp(jmp_buf env); //直接调用返回0,从longjmp调用返回非0值 * void longjmp(jmp_buf env,int val); * 在希望返回到的位置调用setjmp设置返回位置,记录在env的jmp_buf结构中 * 在需要返回的地方调用longjmp,第一个参数是跳转到哪个地方,val是从setjmp的返回值 */
6.getrlimit和serlimit函数
每个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit函数查询和更改
/* * #include <sys/resource.h> * int getrlimit(int resource,struct rlimit * rlptr); * int setrlimit(int resource,const struct rlimit * rlptr); * 两个函数成功返回0,出错返回非0 * 其中rlimit结构如下: * struct rlimit{ * rlim_t rlim_cur; //软限制:当前限制 * rlim_t rlim_max; //硬限制:当前限制的最大值 * }; * 两个函数的resource可取如下值 * ----------------------------------------------- * RLIM_INFINITY 无限制 * RLIMIT_AS 进程可用存储区的最大长度(会影响sbrk和mmap函数) * RLIMIT_CORE core文件的最大字节书,0则阻止创建core文件 * RLIMIT_CPU CPU时间的最大量值,超过此软限制时,向该进程发送SIGXCPU信号 * RLIMIT_DATA 数据段的最大字节长度 * RLIMIT_FSIZE 可以创建的文件的最大字节长度 * RLIMIT_LOCKS 一个进程可持有的文件锁的最大数 * RLIMIT_MEMLOCK 一个进程使用mlock能够锁定在存储器中的最大字节长度 * RLIMIT_NOFILE 每个进程能打开的最大文件数 * RLIMIT_NPROC 每个实际用户ID可拥有的最大字进程数 * RLIMIT_RES 最大驻内存集的字节长度 * RLIMIT_SBSIZE 用户在任意给定时刻可以占用的套接字缓冲区的最大长度(字节) * RLIMIT_STACK 栈的最大长度 * RLIMIT_VMEM 这是RLIMIT_AS的同义词 * ----------------------------------------------- */
相关文章推荐
- 嵌入式系统开发学习步骤(Linux高级编程学习顺序)(zz)
- linux 系统编程-学习笔记10--进程间通信--管道/FIFO/消息队列/
- Linux学习记录--文件IO操作相关系统编程
- linux 系统编程-学习笔记2-文件I/O-open-read
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】揭开Linux Proc文件系统的神秘面纱
- linux系统编程-学习笔记4-chmod/access/chown/link/truncate
- socket编程的最简单实例 - linux系统编程及驱动开发 - 小超嵌入式工作室 嵌入式开发学习交流论坛 XC-STC XC2440技术支持 - Powered by Discuz!
- Linux 系统编程学习-文件操作-DIR等结构体
- linux 系统编程学习笔记一
- linux 系统编程-学习笔记8--信号/线程
- <<Linux内核完全剖析 --基于0.12内核>> 学习笔记 第4章 80x86保护模式及其编程 4.1 80x86系统寄存器和系统指令
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- 嵌入式系统开发学习步骤(Linux高级编程学习顺序)
- Linux学习记录--文件IO操作相关系统编程
- Linux系统和内核编程学习路线
- linux 系统编程学习笔记一
- Linux系统编程学习之《进程控制》
- linux 系统编程-学习笔记6-main函数/atexit函数/动态库、静态库/
- Linux 系统编程学习-文件操作
- 【Linux 系统编程】shell 脚本基础学习之函数(五)