随笔分类 - Linux 系统编程
摘要:fork有下面两中用法:(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中很常见——父进程等待客户端的服务请求。当请求达到时,父进程调用fork,子进程处理此请求。父进程继续等待下一个服务请求。(2)一个进程要执行一个不同的程序,这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec。父、子进程虽然共享正文段,但子进程获得父进程数据空间、堆和栈的副本。由于在fork之后经常跟随exec,所以,为了解决这种复制又被覆盖的低效问题,出现了写时复制(Copy-On-Write, COW)技术,所有的区域由父子进程共享,子进程的虚拟地址指向父进
阅读全文
摘要:C程序在内存中由以下几部分组成:正文段:这是由CPU执行的机器指令部分,通常情况下,正文段是可以共享的,子进程和父进程会共同维护内存中的一个副本;另外,正文段一般也是只读的,以防止程序由于意外而修改其本身;同时其中包含了只读的常量,比如字符串常量等。初始化数据段,即数据段:它包含了程序中已初始化的全局变量,属于静态分配内存;非初始化数据段,即bss段:这个名称来源于早期汇编程序的一个操作符,意思是“block started by symbol(由符号开始的块)”,属于静态内存分配。在程序开始执行之前,内核将此段初始化为0;栈:自动变量以及每次函数调用时所需保存的信息都存放在此段中。借此,有了
阅读全文
摘要:一、main函数:先从程序的执行开始谈起,C程序总是从main函数开始执行,当内核执行C程序时(使用了一个exec函数),在调用main函数前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量,然后为调用main函数做好安排。二、进程终止:有8种方式使进程终止,其中5种为正常终止,它们是:从main返回。调用exit。调用_exit或_Exit.最后一个线程从启动例程返回。最后一个线程调用pthread_exit。异常终止有3种方式,它们是:调用abort。接到一个信号并终止。
阅读全文
摘要:任何一个文件可以有多个目录项指向其i节点。创建一个向现存文件连接的方法是使用l i n k函数。#include int link(const char * e x i s t i n g p a t h, const char * n e w p a t h) ;返回:若成功则为0,若出错则为-1此函数创建一个新目录项n e w p a t h,它引用现存文件e x i s t i n g p a t h。如若n e w p a t h已经存在,则返回出错。这是Apue上关于link函数的介绍,看到这里我并没有在意上面的第一句话,直到下面这个函数出现:s y m l i n k函数创建一个符
阅读全文

浙公网安备 33010602011771号