天天看点

C++实现格式化USB等设备

通过C++我们读取已经mount到设备上的数据节点,读取这个节点,将节点作为参数传递给shell脚本,最后通过shell脚本根据参数来选择格式化哪一个盘。

具体实现过程:

1.初始化系统盘节点信息,将所有信息保存在结构体中

/etc/mtab 文件里面保存的是所有已经挂载上的盘符信息,通过文件方式逐行读取并保存到结构体数组中。

do{

fd = fopen(PARTITION_PATH,"r");

if(NULL == fd)

{

iOutRet = ERROR_FILE_OPEN_FAIL;

break;

}

while(fgets(Line, sizeof(Line),fd))

{

if(Index >= MAX_DISC_NUM)

        {

        iOutRet = ERROR_INVALID_PARAMETER;

            break;

        }

ZeroMemory(ptName,sizeof(ptName));

if (sscanf(Line, " %u %u %u %[^\n ]",&m_NodePartInfo[Index].major, &m_NodePartInfo[Index].minor,

&m_NodePartInfo[Index].size, ptName) != 4)

{

continue;

}

iRet = GetDevType(ptName,&m_NodePartInfo[Index].EDevType);

if(ERROR_SUCCESS != iRet)

{

iOutRet = iRet;

goto OUT_ERROR;

}

for(Start = ptName; *Start; Start++)

{

continue;

}

// LOG_BLINE(" %s dev %d\n",ptName,m_NodePartInfo[Index].EDevType);

if (Start[-1] >= '1' && Start[-1] <= '9')

{

}

else

{

m_NodePartInfo[Index].isRootNode = TRUE;

}

if(1 == m_NodePartInfo[Index].size)

{

m_NodePartInfo[Index].isExtPartition = TRUE;

}

strncpy(m_NodePartInfo[Index].NodePartName,ptName,strlen(ptName));

Index ++;

ZeroMemory(&Line,sizeof(Line));

}

if(0 == Index)

{

iOutRet = ERROR_NOT_FOUND;

break;

}

}

2.通过U盘格式和其它盘分开,获取该u盘mount上的节点号。

一般U盘的格式为vfat 格式,我们通过strstr()函数找出每一个数据段中是否有vfat这个字符串,返回值为1时,读取字符串的第一个字符串,这个字符串即为它mount上的设备节点。

3.将这个字符串的设备节点通过参数传递给脚本,脚本来实现格式化该USB盘

strShellCmd.Format("%s %d %s usb",FDISKSH_PATH,option,rootNode);

system(strShellCmd);

继续阅读