进程:运行的程序
线程:运行的函数
1.main()
启动例程
exit(int main(argc, argv));
2.进程终止
进程正常终止:
<1>main() return;
<2>exit(3);
1)调用终止处理程序
2)标准IO清理程序
<3>_exit(2) _Exit(2);
<4>最后一个线程调用pthread_exit(3);
<5>最后一个线程从启动例程返回
异常终止:
<1>abort(3);
<2>线程对取消作出响应
<3>信号终止
atexit(3);
钩子函数
注册函数执行的顺序与其注册的顺序是相反的
执行条件:main()函数调用return, 或者任意位置调用exit(3);
3.环境变量和环境表
"name=value"
getenv(3);
setenv(3);
4.命令行参数的解析
int getopt(int argc, char **argv, const char *optstring);
argc 和 argv就是main()函数的两个参数
optstring有一下规则:
"-ab:c::"
<1>以"-"开头表示可以解析非选项参数,返回1
<2>"a"解析选项参数"-a",返回'a'
<3>"b:"解析带参数选项"-b argument",返回'b',optarg指向argument
<4>"c::"解析可带参数的选项"-cargument",返回'c',optarg指向argument,入没有参数optarg==NULL
作业:
# ./a.out -Y 4 -M -D -h24 filename
strftime(3);
getopt_long(3);
能解析长格式选项
--help
--help arg
--help=arg
ls -l /etc/passed
gcc hello.c -Wall
tar -cvf bao.tar file1 file2 file3
-l:选项参数
/etc/passwd:非选项参数
-W:带参数的选项 参数all
-f:带参数的选项 参数bao.tar
5.c存储分布布局
6.共享库
手工装载库
dlopen();
dlsym();
dlclose();
7.setjmp()和longjmp()
setjmp(), longjmp()实现函数之间的跳转
goto实现在函数内部跳转
8.getrlimit(2)和setrlimit(2)