- 博客(22)
- 资源 (8)
- 收藏
- 关注
转载 linux内核register_chrdev_region()系列函数
内核提供了三个函数来注册一组字符设备编号,这三个函数分别是 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。其中,register_chrdev_region()是为提前知道设备的主次设备号的设备分配设备编号。alloc_chrdev_region() 是动态分配主次设备号。register_chrdev()
2013-05-27 09:53:47 737
转载 linux下进程间通信的几种主要手段
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posi
2013-05-24 16:01:08 497
原创 net_device结构
结构体定义位置:linux/include/linux/netdevice.h1.net_device代表所有的网络设备,包括其硬件和软件配置net_device: Each network device is represented in the Linuxkernel by this data structure, which contains information aboutbot
2013-04-27 09:17:50 892
原创 linux用户空间与内核的接口
1.内核提供给用户层的接口: 1)systemcall 2)procfs命令:virtual filesystem,编译选项:Filesystems Pseudo filesystems/proc file system support 3)sysctl命令:用户层查看和修改系统变量,并将结果保存在/proc/sys目录下,编译选项:General setupSysctl
2013-04-27 09:17:04 769
原创 linux内核的通知链机制
一、为什么需要通知链: linux内核的各个子系统之间往往互相关联,一个子系统产生或者侦测到的事件,其它的子系统往往也很感兴趣,因此linux内核采用了通知链机制实现内核的子系统之间的通信需求。值的注意的是,通知链机制仅用于内核内部的子系统之间的通信,内核与用户空间的通信依赖于其它机制,如系统调用、procfs、sysctl、ioctl等。 以下图为例,路由器RT直接连接网络A、B
2013-04-27 09:16:27 975
转载 restrict关键字
本文摘自: http://www.oschina.net/question/32294_53573restrict是C99引入的新关键字,它用于声明只会通过该指针对其指向的内存空间进行读写操作,以便编译器能进行更好的优化。我们来看一个跟memcpy/memmove类似的问题。下面的函数将两个数组中对应的元素相加,结果保存在第三个数组中。voidvector_add(cons
2013-04-27 09:15:32 430
原创 linux进程的启动和终止
1. 进程正常终止的5种方式:1)main函数返回2)进程调用exit:进入内核前先进行一些清理工作,如调用各种终止程序(这些终止处理程序可以由atexit注册),关闭标准I/O流等3)进程调用_exit/_Exit:立即进入内核注:exit和_Exit由ISO C说明,_exit由POSIX.1说明4)最后一个线程从其启动例程返回5)最后一个线程调用pthread_exi
2013-04-27 09:13:04 1212
原创 C程序的存储空间布局
1.C程序的组成部分:1)程序正文/机器指令:可共享2)初始化数据段:存储全局变量/静态变量等,存储在该数据段中的数据是在程序中已赋初值的如: int maxcount = 99;3)非初始化数据段:存储全局变量/静态变量等,存储在该数据段中的数据是在程序中未赋初值的,程序开始执行之前,内核会将该数据段中的变量赋值为0或空指针(即我们所谓的全局变量的自动初始化)如: long
2013-04-27 09:11:14 501
原创 C语言细节
1.strlen计算字符串长度时不包括终止字符null,sizeof则包括在内2.atexit函数 int atexit(void (*func)(void)) 1)注册的func由exit自动调用 2)调用顺序与注册顺序相反 3)注册多次的函数将被调用多次 4)ISOC要求系统必须至少支持32个终止处理程序3.ISO C和POS
2013-04-27 09:10:30 529
转载 进程创建:fork、vfork、clone
转自:http://blog.csdn.net/zjg555543/article/details/7419098在Linux中主要提供了fork、vfork、clone三个进程创建方法。 在linux源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),再在这三个函数中
2013-04-27 09:09:44 1061
转载 Linux内核 hlist_head/hlist_node结构解析
内核中的定义:struct hlist_head { structhlist_node *first;};struct hlist_node { structhlist_node *next, **pprev;};这个数据结构与一般的hash-list数据结构定义有以下的区别:1)首先,hash的头节点仅存放一个指针,也就是first指针,指向的
2013-04-27 09:08:56 584
转载 ELF文件格式概要介绍
转自:http://blog.csdn.net/yyt7529/article/details/4245298ELF文件有三种类型:可重定位文件:也就是通常称的目标文件,后缀为.o。共享文件:也就是通常称的库文件,后缀为.so。可执行文件:本文主要讨论的文件格式,总的来说,可执行文件的格式与上述两种文件的格式之间的区别主要在于观察的角度不同:一种称为连接视图(LinkingView),一种称为
2013-04-27 09:06:08 864
转载 ELF文件格式详解
ARM的可执行文件的格式是ELF格式文件,下文对ELF格式做个详细的介绍。序言1. OBJECT文件 导言 ELF头(ELF Header) Sections String表(String Table) Symbol表(Symbol Table) 重定位(Relocation)2. 程序装载与动态连接 导言 Program
2013-04-27 09:05:24 954
转载 linux task_struct的结构注释
1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RUNNING:正在运行或在就绪队列run-queue中准备运行的进程,实际参与进程调度。?TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号(signal)或定时中断唤醒后进入就绪队列run-queue。?TASK_UNINT
2013-04-27 09:03:34 547
转载 任务状态段(Task State Segment)
转自:http://www.cnblogs.com/guanlaiy/archive/2012/10/25/2738355.html任务状态段(Task State Segment)是保存一个任务重要信息的特殊段。任务状态段描述符用于描述这样的系统段。任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分含有当前任务状态段的段基地址和段界限等
2013-04-27 09:02:40 2906
原创 进程控制
1.共享库:减小可执行文件大小,增加程序的运行时开销;开销发生在程序第一次被执行时,或者共享库函数第一被调用时;gcc组织程序使用共享库(将共享库静态链接到可执行文件):gcc-static ex01.c2.进程ID的延迟重用:已终止进程的进程ID可以被重用,但是一般系统都实现了延迟重用算法,以防止将新进程误认为是已终止的先前进程3.进程ID 0通常是调度进程,成为交换进程swapper;
2013-04-27 09:01:34 641
原创 网络编程基础
1.服务器进程如果需要绑定保留端口号,如80 for HTTP,必须以超级用户运行,否则bind将返回错误:PermissionDenied;2.每个子进程只有一个父进程,且可以使用函数getppid获取父进程的进程ID;3.每个父进程可以有多个子进程,且没有函数可以直接获取子进程的进程ID,但是可以通过记录fork返回值的方式获取,如保存在一个数组/链表中;4.并发服务器的一般实现:
2013-04-27 08:59:46 537
原创 信号
1.信号又称软中断2.信号的发送 1)一个进程发送给另一个进程(或自身) 2)内核发给进程3.不可被捕捉、不能忽略的信号:SIGKILL、SIGSTOP4.信号处理函数执行期间,后续递交的相同信号将被阻塞;另外还可以通过在调用sigaction函数时设置sa_mask参数的值指定其它被阻塞的信号,如,将其设置为0则表示只阻塞相同信号5.承上,如果在阻塞期间,一个信号被
2013-04-27 08:58:55 614
转载 函数指针变量
在C语言中,一个函数总是占用一段连续的内存区(位于程序的代码区),而函数名就是函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们称这种指向函数的指针变量称为"函数指针变量"。 函数指针变量定义的一般形式为: 类型说明符 (*指针变量名)(); 对比普通指针变量定义的一
2013-04-27 08:57:36 846
转载 Linux tcpdump命令详解
简介用简单的话来定义tcpdump,就是:dump the traffic on anetwork,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例默认启动tcpdump
2013-04-27 08:54:13 481
Thinking in Java Annotated Solutions Guide, Revision 1.0 - Contents
2009-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人