3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
最初,第7版UNIX文件系統(tǒng)(參見(jiàn)DIR(5))具有將文件名限制為14個(gè)字節(jié)的目錄條目; 目錄中的每個(gè)條目由2個(gè)字節(jié)組成,用于inode編號(hào)加上14個(gè)字節(jié)用于名稱,null填充為14個(gè)字符,但不一定是以null結(jié)尾。我的信念strncpy()
是設(shè)計(jì)用于那些目錄結(jié)構(gòu) - 或者至少,它適用于該結(jié)構(gòu)。
考慮:
14個(gè)字符的文件名未終止。
如果名稱短于14個(gè)字節(jié),則將其填充為全長(zhǎng)(14個(gè)字節(jié))。
這正是通過(guò)以下方式實(shí)現(xiàn)的目標(biāo):
strncpy(inode->d_name, filename, 14);
因此,strncpy()
理想地適合其原始的利基應(yīng)用。巧合的是,防止以null結(jié)尾的字符串溢出。
(注意,長(zhǎng)度為14的空填充不是一個(gè)嚴(yán)重的開(kāi)銷 - 如果緩沖區(qū)的長(zhǎng)度是4 KB并且你想要的只是安全地復(fù)制20個(gè)字符,那么額外的4075個(gè)空值是嚴(yán)重的過(guò)度殺傷,并且可以很容易如果您反復(fù)向長(zhǎng)緩沖區(qū)添加材料,則會(huì)導(dǎo)致二次行為。)
- 3 回答
- 0 關(guān)注
- 1077 瀏覽
添加回答
舉報(bào)