- 博客(18)
- 资源 (13)
- 收藏
- 关注

原创 linux 的普通用户为什么能修改/etc/passwd文件
Unix 的口令文件 /etc/passwd 记录着所有用户和对应的登录密码等信息。/etc/passwd文件的所有者是root而且只有root用户有权限对该文件进行写操作。但是Unix系统其实是允许所有的用户修改自己的登录口令的(即修改/etc/passwd或/etc/shadow 文件)其实现原理如下。首先要说明的是,与每个进程相关联的ID有6个或更多,如图1所示其中进程的有效
2013-05-22 00:45:12
11340
转载 关于C语言负数在内存中的存储
实际上负数在内存中是使用补码存储的,为什么要以补码来存储呢?这是个规定,但是为什么这样规定呢?把负数用补码来记,这样正数与负数加的时候,只要直接相加就可以得到结果。负数与负数加的时候,只要符号位不搞错,其余部分直接相加。这样子运算就很方便。
2013-09-25 19:38:25
2508
转载 ELF格式文件和BIN文件的区别
ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:可重定位的目标文件(Relocatable,或者Object File)可执行文件(Executable)共享库(Shared Object,或者Shared Library) ELF格式提供了两种不同的视角,链接器把ELF文件看成是Se
2013-08-04 22:16:32
5477
转载 linux内核spin_lock分析
今天我们详细了解一下spin_lock在内核中代码实现,我们总共分析四个项目: 1.spinlock_t的定义分析:首先来看一下spinlock_t的定义:typedef struct { raw_spinlock_t raw_lock;#if defined(CONFIG_PREEMPT) &&defined(CONFIG_SMP)
2013-08-04 22:08:11
3113
转载 Linux内核源代码分析——fork()原理&多进程网络模型
今晚和一位500强的leader喝喝小酒吃吃烤鱼,生活乐无边。这位兄弟伙才毕业2年,已经做到管理层了,机遇和能力不可谓不好。喝酒之余,聊到Linux内核的两个问题——fork()、exec()的原理。 兄弟伙:fork()的原理是什么呢? 我:其实一句话就概括了——copy on write。兄弟伙:copy on wirte我懂
2013-06-08 23:30:38
7577
原创 C程序的内存分配区域
C程序一直由下面几部分组成:1 正文段 :是CPU执行的机器指令部分;正文段通常是共享的,程序执行的时候是在内存中保持一份副本;正文段常常是只读的,这是为了防止程序意外操作破坏正文段2 初始化数据段:就是通常所说的数据段,保存了程序中需要明确赋初值的变量,如出现在任何函数之外的申明 int cout = 24;3 非初始化数据段:通常称为bss段,命名来自早期汇编的运算符, “
2013-05-22 00:40:53
730
原创 linux 文件特殊权限位小结
特殊位作用: SUID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行。 SGID对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属组身份来执行。 STICKY:粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。
2013-05-22 00:35:52
786
转载 socket通信之read阻塞
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字 符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和 fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没
2013-05-22 00:17:54
1657
转载 ioremap 与 mmap
内存映射对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间,如下图:
2013-05-08 00:54:04
702
转载 linux网卡驱动-3
紧接上一篇,这里简要介绍net_device 结构和网卡驱动框架。 struct net_device 是一个比sk_buff 更复杂的结构,里面包含了与TCP/IP协议栈通信的接口函数,但是自从2.6.31 之后的内核中这些接口函数就被封装在了 stuct net_device_ops 结构中,在net_device 结构中以 netdev_ops 成员的形式出现。我们就来看如何使
2013-05-08 00:44:25
916
转载 linux网卡驱动-2
接上一篇,我们来看与skb相关的一些重要函数:网络模块中,有两个用来分配SKB描述符的高速缓存,在SKB模块初始函数skb_init()中被创建:void __init skb_init(void){skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buf
2013-05-08 00:42:52
816
转载 Linux 网卡驱动-1
参考:1. 深入理解Linux网络技术内幕 PartIII 2. Essential Linux Device Driver Chap15 3. Linux 内核源码剖析——TCP/IP 实现 5. rtl8139too.c 2010.4 修订 6. Linux 内核 2.6.33 7. google当你
2013-05-08 00:41:42
723
转载 Linux TCP/IP 协议栈学习(2)—— 数据帧收发主要函数及net_device 结构
原文地址:http://www.cnblogs.com/zhuyp1015/archive/2012/12/25/2833163.html /*** netif_rx - post buffer to the network code* @skb: buffer to post** This function receives a packet from a d
2013-05-08 00:36:41
1236
转载 linux内核sk_buff的结构分析
原文地址:http://simohayha.iteye.com/blog/556168 我看的内核版本是2.6.32.在内核中sk_buff表示一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head,在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头,现在在2.6.32里面这个域已经被删除了。而sk_buff的内存布局
2013-05-07 00:12:26
513
转载 linux内核定时器的实现
原文地址 :http://simohayha.iteye.com/blog/507576 由于linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时linux,.这里内的定时器最小间隔也就是1个tick.这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vist
2013-05-07 00:03:32
857
转载 NorFlash和NandFlash的理解
NorFlash和NandFlash接口对比NorFlash带有通用的SRAM接口,可以轻松地挂接在CPU的地址、数据总线上,对CPU的接口要求低。NorFlash的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。如uboot中的ro段可以直接在NorFlash上运行, 只需要把rw和zi段拷贝到R
2013-04-05 19:10:51
778
原创 内核模块初始化函数static int __init init_func() 和退出函数 static void _exit exit_func() _init 和_exit 的理解
模块中初始化函数有的前面有个_init有什么作用。在内核代码iclude/linux/init.h 中有这样的定义#define __init __section(.init.text) __cold notrace#define __initdata __section(.init.data)#define __initconst __section(.init.rodata
2013-04-05 16:23:03
5666
转载 重解几道华为经典C语言面试题
重解几道华为经典C语言面试题1、找错void test1(){ char string[10]; char* str1="0123456789"; strcpy(string, str1);} 这里string数组越界,因为字符串长度为10,还有一个结束符’/0’。所以总共有11个字符长度。string数组大小为10,这里越
2013-02-27 19:33:56
391
UNIX环境高级编程_第二版英文版
2013-03-12
java写的FTP上传下载工具(支持多用户)
2012-12-21
突破校园网,win7启动虚拟wifi允许android手机共享上网的方法
2012-10-02
计算机二级java笔试试题
2011-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人