背景:
在使用fatfs檔案系統的時候,發現檔名一旦超出8.3這格式的時候,就會出現亂碼的現象。
分析:
經過查詢後發現,8.3格式就是短檔名的命名格式,8是指檔名或目錄名的主體部分小於等於8個字元,3是指檔名或目錄名的擴充套件部分小於等於3個字元中間以.作為分割,即類似88888888.333類似的檔案格式。因此這個bug顯然是由於系統長檔名和短檔名造成的。
但是,我們查詢了fatfs中的長檔名的配置方法,即配置ffconf.**件中
#define _use_lfn 2
#define _max_lfn 255
而且我們也在使用到了長檔名的函式裡面初始化了fileinfo.lfname和 fileinfo.lfsize,但是還是不起作用。
#if _use_lfn
static char lfn[_max_lfn];
fileinfo.lfname = lfn;
fileinfo.lfsize = sizeof(lfn);
#endif
解決:
經過查詢fatfs的api手冊發現,官方使用長檔名去讀檔案目錄的時候,會先做如下操作:
#if _use_lfn
fn = *fno.lfname ? fno.lfname : fno.fname;
#else
fn = fno.fname;
#endif
也就是會判斷讀出來的fno.lfname是否為真,如果為真就使用fno.lfname,如果不為真就使用fno.fname。
在**中加上這部分以後,問題得到解決。
linux目錄最大支援檔案個數
檔案系統格式 centos7預設是xfs,centos6預設是ext4,centos5預設是ext3 ext3 檔案數最大支援31998個,檔案系統容量最大16tb,單個檔案最大2tb ext4 檔案數最大無限制,檔案系統容量最大1eb 1eb 1024pb,1pb 1024tb 單個檔案最大16t...
讀目錄(UNIX環境高階程式設計筆記)
對某個目錄具有訪問許可權的任一使用者都可以讀該目錄,但是,為了防止檔案系統發生混亂,只允許核心寫目錄。include dir opendir const char pathname dir fdopendir int fd 兩個函式返回值 若成功,返回指標 若出錯,返回null struct dir...
Linux中的目錄結構淺讀
linux的目錄結構為樹狀目錄結構,如下圖所示,但是下圖只顯示了第一層的部分,其中 表示的linux的根目錄,第二層有 bin boot dev etc home lib lost found media mnt opt proc root sbin tmp usr var等。home 使用者的主目...