1、/proc/partitions中存储有以sd开始的USB存储器的设备名,例如sda、sdb2等。
major主设备编号,例如USB存储器中有3个分区,主设备名为sda,major为8,分区的major也为8,minor为分区编号,sda1、sda2,minor值为1、2
sda的minor为0,name为设备名称,可以通过连接/dev./设备名称挂载到一个目录中。
blocks表示物理设备的逻辑块的大小
2、代码
sign_primacy函数标记主设备
read_proc_partition读取/proc/partitions
#包含
#包含
#包含
typedefstructparititions_info_s
{
unsigned long nMajor;
unsigned long nMinor;
无符号长块;
char ch设备名称[ 50 ];
}parititions_info_t;
{
sda不需要像sda sda1 sda2 sda3那样作为主设备装载
如果//sda中没有分区,则必须装载sda
if((null==pstupartitionsinfo ) |
(nDeviceNum=0)
{
printf((nparamerror ) n );
}
for(I=0; i nDeviceNum - 1; I )
{
if (nlastfindmajor==pstupartitionsinfo [ I ].n major )
{
继续;
}
for(j=I1; j nDeviceNum; j )
{
if (pstupartitionsinfo [ I ].n major!=pstupartitionsinfo [ j ].n major (/major必须相同才能进行比较
{
布雷克;
}
if (空!=strstr (pstupartitionsinfo [ j ].ch设备名称,pstupartitionsinfo [ I ].ch设备名称) )
{
nastfindmajor=pstupartitionsinfo [ I ].n major;
printf ((nzzh _ testprimacychdevicename=% s,nMajor[%lu] minor=%lu Flag=%dn ',
布雷克;
}
}
}
返回0;
}
{
mtdztfp=NULL;
unsigned long nMajor=0;
unsigned long nMinor=0;
unsigned long nBlocks=0;
char ch设备名称[ 50 ]={0};
char chBuffer[1024]={0};
if (空值==pstupartitionsinfo||
NULL==pnNum )
{
printf((nparamerror ) n );
}
FP=fopen(/proc/partitions )、(r );
if (空值==FP ) )。
{
printf ((n fopen/proc/partitions failed (n ) );
}
while(1)。
{
nFindDeviceFlag=0;
memset(chbuffer,0,sizeof ) (chbuffer );
if(null==fgets(chbuffer,sizeof ) chbuffer ),fp )
{
布雷克;
}
memset (ch设备名称,0,sizeof ) ch设备名称);
nsscanfnum=sscanf(chbuffer,' %Lu%Lu%[^n],nMajor,nMinor,nBlocks,chDeviceName );
if(4!=nSscanfNum )
{
继续;
}
if(0!=strncmp (ch设备名称,' sd ',strlen ) (sd ) )
{
继续;
}
memset (pstupartitionsinfo [ ndevicenum ],0,sizeof ) parititions_info_t );
strncpy (pstupartitionsinfo [ ndevicenum ].ch设备名称,ch设备名称,sizeof ) pstupartitionsinfo [ ndevicenum ].chdevice vice name
printf((nMajor )、nMinor )、nBlocks )、ch设备名称)、nmajor、nMinor、nBlocks
//查找设备
nDeviceNum;
处理if(ndevicenum=nMaxNum )//最多nmaxnum个
{
流量(FP );
sign _ primacy (pstupartitionsinfo,nDeviceNum;
返回0;
}
}
流量(FP );
是if(ndevicenum0)
{
sign _ primacy (pstupartitionsinfo,nDeviceNum;
}
返回0;
}
{
pari titions _ info _ tstupartitionsinfo [ 30 ]={0};
read _ proc _ partition (stupartitionsinfo,nMaxNum,nNum );
printf((nNum(%d ) ) n ),nnum );
}