摘要:
C++的设计者Bjarne Stroustrup下了很大的功夫想使用户自定义类型尽可能地和固定类型的工作方式相似,这就是为什么你可以重载运算符,写类型转换函数,控制赋值和拷贝构造函数。 对于类类型,当重载赋值运算符时,需注意以下几个原则: 1.
operator=尽量返回*this的引用; 2.
在operator=中对所有的数据成员赋值; 3.
在operator=中检查给自己赋值的... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(223)
评论(0)
推荐(0)
摘要:
循环展开就是通过在每次迭代中执行更多的数据操作来减小循环开销的影响。其基本思想是设法把操作对象线性化,并且在一次迭代中访问线性数据中的一小组而非单独的某个。这种思想主要适用于计算循环索引和测试循环条件的开销部分所占比重过大(相对于循环体内执行的指令而言),连续执行一组相同的指令,能提高指令的cache命中率,如下例所示,对LoopTest的一片存储空间进行初始化,分别测试普通循环,和8个一组的展开... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(1960)
评论(0)
推荐(0)
摘要:
2010级新生存储知识培训PPT 祝各位师弟师妹学有所成! 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(124)
评论(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
阅读(584)
评论(0)
推荐(0)
摘要:
常量指针与指针常量直接从语义上理解,看const限定那个范围。const int *p 其中的const在*p之前,也就是说*p是常量,不能改变。同样int *const p 其中的const在p之前,所以p是常量,不能改变。位段的符号structtest{inta:2;/*表示范围-2~1 */unsignedintb:2;/*表示范围0-3 */};intmain(){structtestt;... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(133)
评论(0)
推荐(0)
摘要:
上个月给文件系统添加额外的属性设置接口,但却是完全脱离文件系统实现的,直接使用rpc连接元数据服务器来设置/获取属性,而没有通过文件系统的客户端。当时想着还有一种方法就是在fuse-2.8中支持了ioctl接口,可通过为分布式文件系统实现ioctl接口实现扩展属性的获取与设置。 使用ioctl首先要理解ioctl命令的封装格式,ioctl的命令对应一个32bits的整数,其格式如下: ... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(1366)
评论(0)
推荐(0)
摘要:
零长度是指定义数组时,指定其长度为0(如int arr[0];),这样的数组不占用实际的空间,但能通过数组名访问到其指向的地址。如下例所示: #include <stdlib.h>#include <stdio.h>struct device{int num;int count; int reserve[0]; /* * reserve是一个数组名;该数组没有元素;该数组的其实地址紧随结... 阅读全文
posted @ 2013-04-19 14:07
ydzhang
阅读(225)
评论(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
阅读(645)
评论(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
阅读(3689)
评论(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
阅读(195)
评论(0)
推荐(0)
浙公网安备 33010602011771号