博客统计信息

用户名:cutebunny
文章数:26
评论数:10
访问量:40379
无忧币:81
博客积分:595
博客等级:3
注册日期:2008-01-03

我最近发表的评论

windows的磁盘操.. 回复
多谢捧场 :)
windows的磁盘操.. 回复
thanks

背景音乐

我的音乐

00:00 | 00:00

2012-02-06 18:47:33
 
没错,是“漫谈”,而且“漫”得有点乱。然而,抛砖尚可引玉,想到的事情,纵然脉络不是很畅,写下来也不是坏事。开卷有益,动笔也有益。
 
一切缘自一位C语言开发经验非常丰富的的朋友问我的一个问题。朋友问:“C++中的new在分配内存失败时会抛出异常(std::bad_alloc)而不返回0(一些老的编译器可能还在返回0,但这样的编译器实在“太老了”),这跟C程序员的做法很不一样。而且,许多C++程序在使用new创建对象时也根本不检查这种异常。这是一种什么哲学呢?”他还提到:&..
我们在第七节http://cutebunny.blog.51cto.com/301216/625577中探讨了如何获取系统中所有磁盘的磁盘号。但是在很多情况下,仅仅是磁盘号并不能满足我们的需求,我们希望在应用程序界面上显示更详细的磁盘信息。通过前面几节的方法,我们已经可以获得许多磁盘信息,例如磁盘大小,柱面,扇区,分区等等。但是如下图所示,我们在设备管理器中看到的“WDC WD1600AAJS-08B4A0”这种更为人性化的磁盘类型描述,至今为止我们还没有办法获得。本节就来解决这个问题。
 
提前声明,本节涉及一些ATA/APAPI内容,我本人理解的不..
最近碰到了个新问题,记录下来作为windows的磁盘操作那个系列的续篇吧。
一些时候我们的程序需要区分本地存储设备和USB存储设备。在网上搜一搜一般会找到一个最直接的API,GetDriveType,其原型为
UINT GetDriveType(LPCTSTR lpRootPathName)
参数lpRootPathName是存储设备的根目录,例如C:\,返回值即为设备类型。





Return code


Description




DRIVE_REMOVABLE
..
首先我们来看两段简单的程序,如果你不进行编译运行 , 猜一猜结果分别是多少?
程序一


 
 1 #include <iostream>

 2 #include <iomanip>

 3 using namespace std;

 4 

 5 int main()

 6 {

 7     int x=1;

 8     // 结果是多少 ?递增?????/

 9     ++x;

10    &nb..
格式化分区平常在我们看来是再普通不过的操作了,点两下鼠标就可以搞定的事情,但是在程序中实现的的确确不太容易。可能有人说直接调个format命令不就好了,没错,但系统命令存在我们第一节http://cutebunny.blog.51cto.com/301216/624027中阐述的种种问题。
算上format命令,目前我发现有三种方法,
1.Windows API SHFormatDrive。函数原型如下
DWORD SHFormatDrive(
HWND hwnd,
UINT drive,
UINT fmtID,
UINT options
);
参数drive就是需要格式化的分区,从0开始计数。0代表A: ,2代表C: 等等。..
 
有了前几节的基础后,本节给出一个更复杂但却非常实用的例子。
很多情况下,我们想知道当前系统下安装了多少块磁盘,他们的物理驱动器号都是多少,每一块磁盘上有多少个分区,分区号怎么分布,每个分区大小是多少。这就类似于我们打开windows的磁盘管理看到的那种非常清晰的列表。对于后几个问题,我们根据物理驱动器号调用第五节http://cutebunny.blog.51cto.com/301216/624567中的GetPartitionLetterFromPhysicalDrive函数,以及第三节http://cutebunny.blog.51cto.com/301216/624079中的GetDiskDriveLayout函数即可搞定。..
很多情况下,我们在程序中需要获知操作系统安装在哪个分区上或者哪个物理磁盘上,进而对其进行一些操作或避免一些操作。例如要避免对系统磁盘分区表的删除操作。本节讨论如何获取操作系统所在的逻辑分区号和物理驱动器号。
还是先上代码。
/******************************************************************************
* Function: get the number of disk which the system installed on
* input: N/A
* output: N/A
* return: Succeed, disk number
*         Fail, -1
*****..
本节讨论与上一节相反的操作,根据物理驱动器号获取该磁盘上的所有分区号。DeviceIoControl函数并没有提供操作码来直接完成此操作,所以需要稍微绕个圈子来实现这项功能。
大体思路为,先通过GetLogicalDrives函数获得系统中所有分区号,然后过滤掉非硬盘分区(例如软驱、光驱),再过滤掉不属于指定物理磁盘的分区,最后剩下的就是我们所需要的分区号了。
 
代码如下
/******************************************************************************
* Function: get disk's drive letters from physical number
* ..
第一节中http://cutebunny.blog.51cto.com/301216/624027我们谈到了磁盘设备名称的两种形式:
对于物理驱动器x,形式为 \\.\PhysicalDriveX,编号从0开始,例如





名称


含义




\\.\PhysicalDrive0


打开第一个物理驱动器




\\.\PhysicalDrive2

..
上一节中介绍了如何初始化一块空白的磁盘,并创建分区。那么对于一块已存在分区的磁盘,我们如何获得其分区信息,如何删除其分区信息呢?本节对这两类操作进行讨论。
 
获得磁盘分区信息的代码如下。
/******************************************************************************
* Function: get the disk's drive layout infomation
* input: disk, disk name
* output: drive layout info
* return: Succeed, 0
*         Fail, -1
*********************************..
上一节中我们介绍了一些基本概念和主要的API,本节开始我们将列举并分析一些实例。本文中的所有代码我都在vs2008下测试过,读者只需要替换少量的宏定义即可编译执行。
 
面对一块新的磁盘,我们首先要做的就是对其初始化。在系统中通过windows的磁盘管理完成这一点非常容易,但在程序中实现略微复杂。本节的示例代码对一块新硬盘初始化,并在上面创建分区。
代码如下:
 
/******************************************************************************
* Function: initialize the disk and create partitions
*..
最近项目中需要在windows系统下与磁盘打交道,用了一个礼拜时间,弄懂了一些基本的概念,记录于此,并以项目中的部分代码作为范例。
首先说明一点,本文中使用的不是cmd命令行,基于以下几点原因:
1.在C/C++中调用系统命令会存在处理的种种不方便,需要大量额外的代码去分析命令执行结果。
2.windows命令行远不如linux的shell来的强大。
3.效率。
当然,如果不考虑编码,仅作为系统下一种应用工具的话,DiskPart是既安全又便利的选择。
 
我们先来看几个主要的使用频繁的函数。
在windows下与磁盘打交道最主要的API就..

    在软件开发过程中,除了用到vc等编译器之外,我们还经常使用一些辅助工具来提高工作效率,下面介绍我用过的一些工具,权当抛砖引玉了。
 
Beyond Compare ,这是个文件和文件夹对比工具,可以很方便的对比出两个文件夹或文件之间的差别,在差别处会用不同的颜色标示出来。在软件开发中有两个典型的应用场景,一个是比较同一文件不同版本之间的差异,以此来定位由版本差异引入的问题;另一个是,在有些软件项目中会在主版本上建立分支版本来支持不同的需求,在合并时,虽然版本管理工具会提供合并功能,但..
一、理解Linux的单用户多任务,多用户多任务概念;

Linux 是一个多用户、多任务的操作系统;我们应该了解单用户多任务和多用户多任务的概念;

1、Linux 的单用户多任务;

单用户多任务;比如我们以beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,所以又打开xmms 来点音乐;当然听点音乐还不行,MSN 还得打开,想知道几个弟兄现在正在做什么,这样一样,我在用beinan 用户登录时,执行了gedit 、xmms以及msn等,当然还有输入法fcitx ;这样说来就有点简单了,一个beinan用户,为了完成..
目录
1、vsFTPd,目前常用FTP服务器套件;
2、ftp 用户管理解说;
2.1、匿名ftp 用户和用户组的理解;
2.2、匿名ftp 用户和ftp用户组是否可以删除;
3、vsFTPd的安装;
4、vsFTPd的服务器的启动和关闭;
4.1、vsFTPd服务器启动和关闭的通用方法;
4.2、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭:
5、vsFTPd的服务器和防火墙及SELINUX的关系;
6、500 OOPS: vsftpd: refusing to run with writable anonymous root
7、关于vsFTPd配置文件的说明;
8、关于vsFTPd服务器的一些常用功能的实现;
8.1、关于匿名上传下载..
Linux网卡配置(一)网卡配置文件
(1)/etc/sysconfig/network-scripts/ifcfg-interface-name
配置文件ifcfg-interface-name包含了初始化接口所需的大部分详细信息。其中interface-name将根据网卡的类型和排序而不同,一般其名字为eth0、eth1、ppp0等,其中eth表示以太(eth0)类型网卡,0表示第一块网卡,1表示第二块网卡,而ppp0则表示第一个point-to-poirt protocol网络接口。在ifcfg文件中定义的各项目取决于接口类型。下面的值较问常见:
》DEVICE=name ,其中,name是物理设备名。
》IPADDR=addr,其中,addr是IP地址。
》..
2008-06-11 16:53:48
    mdadm是linux下管理软件raid的工具,有不少人用raidtools,但mdadm的使用显然比raidtools简单,推荐使用mdadm。
    mdadm可以在[url]http://www.cse.unsw.edu.au/~neilb/source/mdadm/[/url]下载。
 
1.编译内核
我的文章都在编译内核,呵呵,没办法,谁叫咱是搞内核的呢。
编译内核,加入对RAID的支持
在源代码目录下 make menuconfig
选中 device drives ---> Multi-device support (RAID and LVM) --->
  x x    [*] Multiple devices driver support (RAID a..
    在Linux系统中使用bonding技术,可以将两块网卡绑定为一个对外IP使用,以达到高可用或负载均衡的目的。以下简要介绍该技术的使用。
 
1.安装两块网卡
    在linux系统下将两块网卡配置好,使其均能独立工作。可能会碰到驱动问题,自己想办法解决吧,无非是在内核配置里找或者找第三方的。
    网卡不一定要一个型号,我用的一块是独立的,一块是集成的,也没什么问题。
 
2.编译内核
在内核中添加bonding的支持。
在原码目录下make menuconfig
选上device drivers -&g..
1.基础知识
    一个操作系统可以简单的抽象为,引导程序+内核+文件系统。
    vmlinuz是Linux 内核的镜像文件,可以被引导程序加载,从而启动Linux系统。
    initrd的全称是boot loader initialized RAM disk,它是系统启动时所使用的根文件系统映像文件,这个文件系统中包含几个驱动模块,用来装载实际的根文件系统,比如一个IDE或SCSI硬盘的驱动模块,内核装入这个模块之后用它来驱动硬盘,挂接硬盘到ramdisk的某个子目录,然后再用其中的pivot_root命令,将硬盘文件系统变成根文件系..
2008-03-23 14:12:55
offsetof(TYPE, MEMBER)
该宏在Linux内核代码(版本2.6.22)中定义如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
 
分析:
(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0,这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为size_t型的就OK了,size_t其实也就是int。
typedef __kernel_size_t  size_t;
typedef unsigned int&nbs..
 <<   1   2   >>   页数 ( 1/2 )

公告