摘要:
链表(list)和哈希表(hlist)是内核常用到的两个工具,负责组织内核中很多的数据结构,如在进程管理中用于组织进程,文件系统中的inode节点链表,dentry链表,vfsmount链表等等。
链表使用struct list_head内嵌结构来将其寄生的结构组织成双向循环链表,并且表头跟普通节点的结构相同,非常容易理解。
但哈希表不同,其表头跟普通节点采用不同的数据结构,并且节点的组织也不是... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(580)
评论(0)
推荐(0)
摘要:
在项目中遇到一个问题,当客户端通过SUN RPC进行远程过程调用时,服务器如何获取调用方的IP地址,由于RPC是socket的封装,在send/recv的调用中都能获取数据包的源IP地址,故RPC肯定又能提供这样的接口。 最开始的需求源于DNFS的存储节点周期性的向元数据服务器发送心跳信息,当收到心跳信息后,服务器需要辨别心跳信息来自哪一个存储节点,WCW师兄的方法是在调用参数中增加IP地址... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(2068)
评论(0)
推荐(0)
摘要:
Linux系统下一切都是文件,可以像使用普通文件一样使用设备,可直接操作设备扇区内容,这种方式不经过文件系统。 #include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <libgen.h>#include <unistd.h>st... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(585)
评论(0)
推荐(0)
摘要:
http://blog.chinaunix.net/u2/87570/showart_2048930.html介绍了如何编写守护进程,其实linux提供了将进城在后台运行的函数daemon。#include <unistd.h>int daemon(int nochdir, int noclose);1. daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。2. 当nochdir为0时,daemon将更改进城的根目录为root(“/”)。3. 当noclose为0是,daemon将进城的STDIN, STDOUT, STDERR都重定向到/dev/null。 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(648)
评论(0)
推荐(0)
摘要:
fuse提供两种类型的操作接口,fuse lowlevel operations类似于内核文件系统的接口,以inode号作为访问的关键字,而更高级的fuse operations则提供以路径名作为关键字的访问形式,这样即使fuse用户对内核文件系统并不了解,也能编写文件系统程序。高级的接口,其实是对fuse lowlevel operations的一个封装(相当于实现了一个用户空间文件系统fuse_fs,但其数据都放在内存中),它实现了一组lowlevel operations,并通过hash表来组织目录项,实现inode关键字向路径名关键字的转换(逆向路径名查找,索引节点中需要记录父节点的n 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(3701)
评论(0)
推荐(0)
摘要:
Linux系统的系统调用通过设置全局errno来标示错误类型http://blog.chinaunix.net/u2/87570/showart_2137607.html,并通过perror,sperror函数提供对errno的解析。而我们平时写程序的错误处理方式类似于下面的代码:if ( p == NULL ){ printf ( "ERR: The pointer is NULL\n" );}if(socket(PF_INET, SOCK_STREAM, 0) < 0) {printf(“create socket errr\n”);}这种方式虽然没什么问题,但其 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(197)
评论(0)
推荐(0)
摘要:
如果在编写内核源代码时给内核留下后门,则你可以很容易的利用,则可轻易的使用模块实现一些扩展功能(实现一些跟内核相关的应用或是出于攻击性目的的扩展)。例如:在read系统调用的实现中,你留下了后门:在read_write.c中,定义了函数指针void (backdoor*)(size_t *count) = NULL;并使用EXPORT_SYMBOL带出符号backdoor。在sys_read中加入如下代码:if(backdoor != NULL) backdoor(&count); //这里的count为sys_read的最后一个参数在内核模块中,你可以实现自己的后门函数,并将back 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(231)
评论(0)
推荐(0)
摘要:
当克隆或者重装虚拟机后,再启动系统(Fedora 11)时会发现系统下不再有eth0,而变成了eth1,当使用/etc/init.d/network重启网络时,会提示找不到设备eth0及eth1的启动脚本。做以下改动:/etc/sysconfig/network-scripts/ifcfg-eth0重命名为/etc/sysconfig/network-scripts/ifcfg-eth1/etc/init.d/network restart 提示找不到eth0 发现脚本中的device一项没有改过来,将其改为eth1(或者删掉)/etc/init.d/network restart 提示网.. 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(320)
评论(0)
推荐(0)
摘要:
总是感觉DNFS中缺乏应有的安全机制,如果简单的在挂载之前加入密码认证方式,我感觉没有多大的意义,多于开源的代码说,如果跳过了认证过程,没有任何意义,另外如果使用密码认证方式,也不能像一些网站那样注册,那样的话认证过程起不到任何作用,如果以付费的方式使用,用户的用户名密码应由管理者根据用户所购买的服务统一的发放和注销。花了点时间看了一下用得比较多的几种认证方式,如Kerberos,PKI/CA,这两种方式都是依赖于一个信任的第三方,其实这也说明了安全是有源头的,无论多少复杂的实现,最后必须有一个可信任的原点,一切的机制都仅仅是这个原点的扩展。计算机里很多的机制都是来源于现实生活,如云计算(将计 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(264)
评论(0)
推荐(0)
摘要:
#include <iostream>#include <cstdlib>using namespace std;/* 重载new应返回void*类型,如果内存分配请求成功,就返回指向内存的指针;* 如果失败,则遵循规定抛出一个std::bad_alloc类型的异常* 重载operator new需要注意的一些问题,参见:* http://blog.csdn.net/xushiweizh... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(246)
评论(0)
推荐(0)
浙公网安备 33010602011771号