- 博客(9)
- 资源 (2)
- 收藏
- 关注
原创 select、poll、epoll解析
一、select#include <sys/select.h>#include <sys/time.h>int select(int nfds, fd_set *readfds, fd_set *writefds, d_set *exceptfds, struct timeval *timeout);void FD_CLR(int fd, fd_set *s...
2018-07-18 20:09:41 448
原创 exit(), _exit(), return的区别
exit():清理I/0缓存区后再退出进程_exit():直接结束进程进入到内核中return:函数返回,如果返回的是main函数,则为退出程序exit()和_exit()的最大区别是:exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。_exit()函数直接将进程关闭,缓冲区的数据将会丢失。"缓冲I/O操作":对每一个打开的文件,在内存中都有一片缓冲区,每次读...
2018-07-15 22:44:14 273
原创 linux 进程地址空间分布
在32位操作系统中,内存空间拥有4GB的寻址能力。操作系统会把高地址的空间分配给内核,称为内核空间。(1)内核空间:默认情况下,Windows将高地址的2GB空间分配给内核,Linux将高地址的1GB空间分配给内核。剩下的2GB或3GB的内存空间称为用户空间。在用户空间里,有许多地址区间有特殊的地位,一般来讲,应用程序使用的内存空间里有如下"默认"的区域。(2)栈:用于维护函数调用的上下文。栈通常...
2018-07-15 22:43:00 3201
原创 标准库函数和系统调用的区别
一、标准库函数和系统调用的区别函数库调用:与用户程序相联系,在用户地址空间执行,属于过程调用,调用开销较小。系统调用:是操作系统的一个入口点,在内核地址空间执行,需要在用户空间和内核上下文环境间切换,开销较大。一般没有 库函数对文件的操作实际上是通过系统调用来实现的,因此使用库函数也有系统调用的开销。为什么不直接使用系统调用呢?因为读写文件通常是大量的数据(相对于底层驱动的系统调用所实现的数...
2018-07-15 22:39:04 1824
原创 列出常见的信号,信号怎么处理?
1、常见的信号信号(signal)是很短的信息,可以被发送到一个进程或一组进程,发送给进程的唯一信息通常是一个数,以此来表示信号。信号的两个主要目的:让进程知道已经发生了一个特定的事件;强迫进程执行它自己代码中的信号处理程序。$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABR...
2018-07-15 22:37:01 2183
原创 进程、线程、多进程、多线程
一、进程和线程的区别(1)进程:资源分配的最小单位;线程:程序执行的最小单位(CPU调度和分派的基本单位)。(2)进程有独立的地址空间,每个进程都有自己的数据段、代码段和堆栈段;线程没有单独的地址空间,它包含独立的栈和CPU寄存器(同一进程内的线程共享进程的地址空间)。(3)一个进程崩溃后,在保护模式下不会对其它进程产生影响;一个线程死掉就等于整个进程死掉。(4)进程之间的通信只能通过进程通信的方...
2018-07-15 22:34:35 433
原创 如何定位内存泄漏
常见的内存错误:(1)内存分配未成功,却使用了它(2)内存分配成功,但尚未初始化就引用它(3)内存分配成功且初始化,但操作越过了内存的边界(4)忘记释放内存,造成内存泄漏(5)释放了内存却继续使用它以发生的方式来分类:(1)常发性内存泄漏,发生内存泄漏的代码会被多次执行到,每次执行都会导致一块内存泄漏(2)偶发性内存泄漏(3)一次性内存泄漏,发送泄漏的代码只会被执行一次(4)隐式内存泄漏,程序在运...
2018-07-15 22:24:00 12828
原创 写一个C程序判断系统是32或64位、大端或小端字节序
一、判断系统是32位或64位32位处理器一次只能处理32位,也就是4个字节的数据,虚拟地址空间的最大值是4G。64位处理器一次能处理64位,也就是8个字节的数据,虚拟地址空间的最大值是16T。32位处理器:系统指针(32位 ),long(32位),int(32位),short(16位)64位处理器:系统指针(64位 ),long(64位),int(32位),short(16位)#include &...
2018-07-15 22:10:31 3984
原创 IO:阻塞、非阻塞、同步、异步
Network I/O:阻塞(blocking)、非阻塞(nonblocking)、同步(synchronous)、异步(asynchronous)I/O涉及到两个系统对象:(1)调用I/O的process(thread),(2)系统内核(kernel)。I/O操作发生时经历两个阶段:(1)等待数据ready,(2)将数据从内核拷贝到进程中。# 阻塞IO当用户进程调用了recvfrom这个系统调用...
2018-07-11 12:25:06 266
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人