- 博客(33)
- 资源 (1)
- 收藏
- 关注
转载 tee命令
功能说明:读取标准输入的数据,并将其内容输出成文件。语 法:tee [-ai][--help][--version][文件...]补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。参 数: -a或--append 附加到既有文件的后面,而非覆盖它. -i-i或--ignore-interrupts 忽略中断信号。
2014-10-14 09:56:50
940
转载 linux awk命令详解(转载)
简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创始人 Alfr
2014-09-04 10:47:01
469
转载 Linux设备模型 (4)
转载:http://www.cnblogs.com/wwang/archive/2010/12/27/1916024.html《Linux设备模型 (2)》和《Linux设备模型 (3)》主要通过一些简单的实作介绍了kobject、kset、kobj_type、attribute等数据结构的用法,但这些实作并没有涉及到实际环境下的设备模型和sysfs。本文将以/sys下的module子
2014-09-02 15:11:36
478
转载 Linux设备模型 (3)
转载:http://www.cnblogs.com/wwang/archive/2010/12/21/1912380.html在上文中,我们介绍到如何使用default attribute。Default attribute使用很方便,但不够灵活。比如上篇文章在Kobject一节中提到的那个例子,name和val这两个attribute使用同一个show/store函数来访问,如果attr
2014-09-02 13:59:01
379
转载 Linux设备模型 (2)
转载:上一篇文章《Linux设备模型 (1)》主要介绍了Linux设备模型在用户空间的接口sysfs,用户通过这个接口可以一览内核设备的全貌。本文将从Linux内核的角度来看一看这个设备模型是如何构建的。在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录。从面向对象的角度来说,kobject可以看作是所有设备对象的基类,因
2014-09-02 13:58:22
3614
转载 Linux设备模型 (1)(转载)
随着计算机的周边外设越来越丰富,设备管理已经成为现代操作系统的一项重要任务,这对于Linux来说也是同样的情况。每次Linux内核新版本的发布,都会伴随着一批设备驱动进入内核。在Linux内核里,驱动程序的代码量占有了相当大的比重。下图是我在网络上搜索到的一幅Linux内核代码量的统计图,对应的内核版本是2.6.29。我们可以很明显的看到,在Linux内核中驱动程序的比例已经非常高
2014-09-02 13:56:01
380
转载 makefile(感觉不错,转载了)
最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比
2014-09-01 11:25:38
402
转载 DMA相关
unsigned long virt_to_bus(volatile void *address);void *bus_to_virt(unsigned long address);在使用IOMMU或反弹缓冲区的情况下,上述函数一般不会正常工作。而且,这两个函数并不建议使用。需要说明的是设备不一定能在所有的内存地址上执行DMA操作,在这种情况下应该通过下列函数执行DMA地址掩
2014-08-28 16:17:18
402
转载 scatterlist分析 (DMA)
使用scatterlist的原因就是系统在运行的时候内存会产生很多碎片,比如4k,100k的,1M的,有时候对应磁盘碎片,总之就是碎片。而在网络和磁盘操作中很多时候需要传送大块的数据,尤其是使用DMA的时候,因为DMA操作的物理地址必须是连续的。假设要1M内存,此时可以分配一个整的1M内存, 也可以把10个10K的和9个100K的组成一块1M的内存,当然这19个块可能是不连续的,也可能其中某些或全
2014-08-28 15:31:49
2159
原创 memset与memcpy
void *memset(void *s, int ch, size_t n);将s中前n个字节 (typedef unsigned int size_t n)用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
2014-08-19 14:55:21
623
转载 open-iscsi源码分析-list-head分析(五)
list-head结构在linux内核中用得非常多,这是一个双向链表结构,可以灵活嵌入其他数据结构中,对于建立链表非常方便。在Linux内核中,由于很多数据结构都需要连成一个链表进行管理,所以有了list-head将链表的管理独立出来,所以在内核编程不需要自己实现list-head的一些管理函数,可以直接调用。 在open-iscsi用户态编程时,将这个文件从内核中拷贝出来了:
2014-08-18 15:28:49
444
转载 open-iscsi源码分析-会话建立(六)
前面可以看出,处理控制中心还是iscsid守护进程,其他进程都是向它发出服务请求,然后它做出响应,而它完成一些操作又是向底层驱动发出指令。在前面的源码中可以发现,重要是一个mgmt_ipc_functions的函数指针数组是一个操作函数集合,其中的函数分别处理不同的服务,服务id就是它在函数指针数组中的索引。/*不同任务id对应的处理函数地址*/static mgmt_ipc_fn_t
2014-08-18 15:28:35
1436
转载 open-iscsi源码分析-进程通信(四)
前面分析了open-iscsi主要有一个守护进程iscsid,即通过本地socket和用户其他进程通信,比如iscsiadm管理执行任务时,需要和iscsid通信,iscsi的底层驱动则通过netlink和iscsid通信,而用户态其他进程还通过共享内存和iscsid日志守护进程通信。所以在iscsi服务启动后,我们会发现在系统中有两个名为iscsid的进程,其中一个为日志守护进程,另一个
2014-08-18 15:28:15
873
转载 open-iscsi源码分析-iscsid(一)
最近用到open-iscsi作用initiator,遇到很多问题,就打算粗率对open-iscsi的源码进行一个分析。 open-iscsi的组成和用法就不讲了,源码包中的README说得非常清楚,主要分为驱动和用户态两部分,用户态又分为服务守护进程和管理程序,必须先加载驱动,守护进程才能启动成功,最后才是运行iscsiadm进行一些常规管理。 今天首先对open-is
2014-08-18 15:27:04
1039
转载 open-iscsi源码分析-日志处理(二)
在iscsid主函数中有: log_pid = log_init(program_name, DEFAULT_AREA_SIZE, daemonize ? log_do_log_daemon : log_do_log_std, NULL); 初始化日志系统,现在进入log_init函数,对open-iscsi的日志处理方式进行详细分析: /*
2014-08-18 15:26:01
680
转载 open-iscsi源码分析-流程详细分析(三)
在iscsid.c文件的main函数中,有:sysfs_init();这个函数主要是获取系统sys目录://获取sys目录int sysfs_init(void){const char *env;/*从环境变量中获取sys路径*/env = getenv("SYSFS_PATH");if (env) {strlcpy(sysfs_path
2014-08-18 15:23:50
1410
转载 linux中创建scst iscsi-scst
从官方 http://scst.sourceforge.net/downloads.html下载scst iscsiscst 注意要版本一致,我下载的都是2.2.0版本(1)解压下载的两个包,我是解压到用户目录下的my文件夹。如下,对isci-scst也同样操作。建议这一步在普通用户下操作,这样方便可以在图形界面中直接进去目录查看。建议解压后先看一下readme及iscsi-sc
2014-08-18 14:37:33
700
转载 modprobe XXX not found 解决与Depmod命令; insmod/modprobe的区别
modprobe XXX not found 解决:把模块文件放到 /lib/module/`uname -r`/kernel/ 目录下运行 depmod再 modprobe 就好了 modprobe 和 depmod 的使用modprobe和insmod类似,是用来动态加载模块的但区别在于,使用insmod必须再模块所在文件下加载模块,而m
2014-08-18 14:23:17
1495
转载 IP网络存储iSCSI之一iSCS的概念、组成及工作原理
一、iscsi的概念(zhua)iscsi,即internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射为以太网数据包。iscsi技术最初由cisco和ibm两家公司开发,并且得到了广大IP存储技术爱好者的大力支持,这几年得到迅速的发展壮大。iscsi的优势主要表现为:首先,iscsi没用tcp/ip协议,而tcp/ip是在网络方面最通用、最成熟的协议,且ip网
2014-08-18 14:00:21
2767
转载 mdadm
★mdadm简介我们可以使用man mdadm命令来查看mdadm的帮助信息:[root@localhost mdadm-2.6.2]# man mdadm☆mdadm用法 基本语法:mdadm [mode] [options] 目前支持:LINEAR, RAID0(striping), RAID1(mirroring), RAID4,
2014-08-18 13:52:15
816
转载 iscsi服务端(target)与客户端(initiator)
iSCSI 是一种 SAN的设备而 SAN的设备主要是提供 Server 存储体的空间.相较于传统的 SAN 是以光纤为传输媒体而 iSCSI(Internet SCSI)他是 IP-based 的数据存储的设备.使得他能更容易应用在企业中. 1.一般的网卡就能当作 iSCSI Target 但是缺点就是会消耗太多的 CPU 资源,针对这样的问题所以发展出另外两种的 iSCSI Target 网卡
2014-08-14 15:41:17
4120
转载 fdisk命令详解
fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段 我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ; fdisk 操作硬盘的命令格式如下: [root@localhost beinan
2014-08-14 11:12:11
2915
转载 静态常量与非静态常量的关系(static const 与const)
什么叫常量?一般来说就是不会变的量静态与非静态: 静态:对于该类的对象来说,都只有一个,叫类变量 非静态:每个该类的对象都各有一个,叫成员变量.因为是常量,不会变的,所有的对象都是一样的,所以就只需要一个就够了.工商银行卡类:他们有一个静态的银行卡名称叫:工商银行卡-->静态每个卡又月自己的卡号-->非静态.在创建对象的时候,需要每个成员变量(非静态)开
2014-08-12 14:03:23
753
转载 static与const
对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.static const 应该就是上面两者的合集.下面分
2014-08-12 10:12:05
5053
转载 Sizeof与Strlen的区别与联系(转)
Sizeof与Strlen的区别与联系(转)1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如:
2014-08-11 16:39:21
317
转载 const 常类型
什么是const?编辑 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2为什么引入const?编辑 const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3主要作用编辑 (1)可以定义const常量,具有不可变性。
2014-08-11 14:55:21
400
转载 QVector
QVector类是一个提供动态数组的模板类。QVector是Qt普通容器类的一种。它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们。QList、QLinkedList和QVarLengthArray也提供了相似的功能,它们使用方法如下:l QList一般用得最多,它能满足我们绝大部分需求。像prepend()和insert()这样的操作通常比QVector要快些
2014-08-11 11:25:43
776
转载 QTimer
QTimer类提供了定时器信号和单触发定时器。它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。注意当QTimer的父对象被销毁时,它也会被自动销毁。QTimer *timer = new QTimer( myObj
2014-08-11 11:13:39
487
转载 [Qt笔记]QDir的用法
类QDir提供了对目录结构和它们的内容的访问方式。QDir用来操作路径名,访问关于路径和文件的信息,操作基础的文件系统,还可以用来访问Qt的资源系统。 Qt使用"/"来作为通用的目录分隔符,这一点和在URLs中的路径分割符的用法一致。如果你使用"/"作为文件分隔符,Qt会自动地转换你的路径来匹配你的基础的操作系统。 绝对路径的用法:QDir("/
2014-08-04 09:51:18
2688
转载 Qt 多线程学习
最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本《C++ GUI Qt4 编程》来学习。 这本书的第14章是关于多线程的知识,使用的Qt版本是Qt4.x。在下用的是最新的Qt 5.2,所以代码上有一些不兼容,稍加修改就可以运行了。 Qt的多线程简单来说就是继承QThread类,重载run()函数,start()启动线程。首先来看下书上的
2014-07-29 17:13:49
369
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人