有时,进程需要向自身发送信号,raise 函数就执行了这一任务。 #include <signal.h> int raise(int sig); 在单线程程序中,调用raise相当于对kill的如下调用: kill(getpid(), sig); 支持线程的系统会将raise(sig)实现为:pth ...
分类:
其他好文 时间:
2018-03-30 21:36:26
阅读次数:
103
信号处理器简介 信号处理器程序(也称为信号捕捉器)是当指定信号传递给进程时将会调用的一个函数。 这里会学习信号处理器的基本原理,后面将继续学习。 调用信号处理器程序,可能会随时打断主程序流程;内核代表进程来调用处理器程序,当处理器返回时,主程序会在处理器打断的位置恢复执行。 虽然信号处理器程序几乎可 ...
分类:
其他好文 时间:
2018-03-30 17:23:39
阅读次数:
127
在堆上分配内存:malloc和free 一般情况下,C程序使用malloc函数族在堆上分配和释放内存。较之brk和sbrk,这些函数具备不少优点: 属于C语言标准的一部分 更易于在多线程程序中使用 接口简单,允许分配小块内存 允许随意释放内存块,它们被维护于一张空闲内存列表中,在后续内存分配调用时循... ...
分类:
其他好文 时间:
2018-03-30 01:12:22
阅读次数:
156
尽管malloc和free所提供的内存分配接口比之brk和sbrk要容易许多,但在使用时仍然容易犯下各种编程错误。 理解malloc和free的实现,将使我们洞悉产生这些错误的原因以及如何才能避免此类错误。 to be continued 。。。。。。 ...
分类:
其他好文 时间:
2018-03-30 01:08:44
阅读次数:
215
一、项目初衷和爬虫概述 1.项目初衷 本人的大学毕设就是linux上用c写的一个爬虫,现在我想把它完善起来,让他像一个企业级别的项目。为了重复发明轮子来学习轮子的原理,我们不使用第三方框架(这里是说的是指通常的linux系统编程教材以外的库和接口-0-,当初我也是在虚拟机上跑的ubuntu+putt ...
分类:
编程语言 时间:
2018-03-29 21:24:09
阅读次数:
259
每个进程所分配的内存由很多部分组成,通常称之为"段(segment)"。 文本段包含了进程运行的程序机器语言指令。文本段具有只读属性,以防止进程通过错误指针意外修改自身指令。 因为多个进程可同时运行同一程序,所以又将文本段设为可共享,这样,一份程序代码的拷贝可以映射到所有这些进程的虚拟地址空间中。 ... ...
分类:
系统相关 时间:
2018-03-29 02:06:21
阅读次数:
196
进程的创建-fork 进程vs程序 编写完毕的代码,在没有运行的时候,称之为程序。 正在运行着的代码,就称为进程。进程除包含代码以外,还有需要运行的环境等,所以和程序是有区别的。 fork() Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程: ...
分类:
编程语言 时间:
2018-03-29 02:04:25
阅读次数:
213
进程(process)是一个可执行程序(program)的实例。 程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,所包括的内容如下所示。 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息(metainformation)。内核(kernel)利用此信息来解释文件... ...
分类:
系统相关 时间:
2018-03-28 01:35:21
阅读次数:
147
目前学习到的是一个文件描述符对应着一个打开的文件,似乎是一一对应的关系。但是实际上并不是这样的。多个文件描述符指向同一个打开的文件,是可能的也是必要的。这些文件描述符可以在相同或者不同的进程中打开。 要理解具体情况,需要查看内核维护的3个数据结构。 进程级的文件描述符表 系统级的打开文件表 文件系统... ...
分类:
其他好文 时间:
2018-03-27 01:45:02
阅读次数:
135
fcntl系统调用对一个打开的文件描述符执行一系列的控制操作。 int fcntl(int fd, int cmd, …) cmd参数所支持的操作范围很广 fcntl的第三个参数以省略号表示,意味着可以将其设置为不同的类型,或者加以省略。内核会根据cmd参数的值来确定该参数的数据类型。 暂时没有例子... ...
分类:
其他好文 时间:
2018-03-25 16:00:06
阅读次数:
157