不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2016-08-27 09:41  分类:Linux_C基础 

一、什么是信号

用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。

信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。

作者:php-note.com  发布于:2016-08-27 09:40  分类:Linux_C基础 

有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些方法及它们之间的区别。

一、system()函数调用

system函数的原型为:

#include <stdlib.h>
int system (const char *string);

作者:php-note.com  发布于:2016-08-23 18:39  分类:Linux_C基础 

C 编程中,经常需要操作的内存可分为下面几个类别:

  1. 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的
  2. 堆区(heap):一般由程序员分配与释放,基程序员不释放,程序结束时可能由操作系统回收(C/C++没有此等回收机制,Java/C#有),注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
  3. 全局区(静态区)(static):全局变量和静态变量的存储是放在一块儿的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
  4. 文字常量区:常量字符串是放在这里的,程序结束后由系统释放。
  5. 程序代码区:存放函数体的二进制代码。
作者:php-note.com  发布于:2016-08-21 18:36  分类:Linux_C基础 

散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。     

-

数据结构中,有个时间算法复杂度O(n)的概念来衡量某种算法在时间效率上的优劣。哈希表的理想算法复杂度为O(1),也就是说利用哈希表查找某个值,系统所使用的时间在理想情况下为定值,这就是它的优势。那么哈希表是如何做到这一点的呢?

作者:php-note.com  发布于:2016-08-13 18:15  分类:Linux_C基础 

条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条件变量被用来进行线承间的同步。

作者:php-note.com  发布于:2016-08-04 14:40  分类:Linux_C基础 

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些。通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽。

并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。

作者:php-note.com  发布于:2016-08-04 14:39  分类:Linux_C基础 

fcntl系统调用

功能描述:根据文件描述词来操作文件的特性。

用法:

int fcntl(int fd, int cmd); 
int fcntl(int fd, int cmd, long arg); 
int fcntl(int fd, int cmd, struct flock *lock); 
作者:php-note.com  发布于:2016-08-04 14:38  分类:Linux_C基础 

在写网络程序的时候,建立TCP socket:

sock = socket(PF_INET, SOCK_STREAM, 0);

然后再绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置问AF_INET,即使用IP。

作者:php-note.com  发布于:2016-08-03 14:29  分类:Linux_C基础 

提问一:

Linux IO多路复用有 epoll, poll, select,知道epoll性能比其他几者要好。也在网上查了一下这几者的区别,表示没有弄明白。

IO多路复用是什么意思,在实际的应用中是指什么情况?

以及IO多路复用在一些异步web server中的实际应用,就好比nginx是怎样使用epoll来实现异步IO处理的,一个请求到来了,nginx使用epoll接收请求的过程是怎样的?

作者:php-note.com  发布于:2016-08-03 14:27  分类:Linux_C基础