天天看點

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);

繼續閱讀