मैं एक उच्च प्रदर्शन आई/ओ कार्यक्रम पर काम कर रहा हूँ और मैं शारीरिक (और नहीं तार्किक) बाइट निर्धारित करने के लिए सबसे अच्छा तरीका खोजने की कोशिश कर रहा हूँ सी ++ के साथ डिवाइस के डिस्क ब्लॉक का आकार। मेरे शोध अब तक निम्नलिखित कोड का टुकड़ा करने के लिए मुझे प्रेरित किया है:शारीरिक डिस्क ब्लॉक आकार का उपयोग C/C++
#include <iostream>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char ** argv)
{
// file information including block size of the device
struct stat info;
// device to get block size from
char * device = "/mnt/hdb1";
if (stat(device, &info))
{
printf("stat() error");
strerror(errno);
exit(1);
}
printf("Prefered block size for '%s' is %i byte\n", device, info.st_blksize);
return 0;
}
आदमी पृष्ठों का कहना है निम्नलिखित के बारे में st_blksize
:
st_blksize क्षेत्र कुशल फाइल सिस्टम के लिए "पसंदीदा" ब्लॉकसाइज देता रहा/हे। (छोटे मात्रा में एक फाइल करने के लिए लेखन एक अक्षम पढ़ने के लिए संशोधित-पुनर्लेखन हो सकती है।)
, लेकिन अगर st_blksize
तार्किक या भौतिक डिस्क ब्लॉक आकार है यह उल्लेख नहीं है।
तो, st_blksize
शारीरिक डिस्क ब्लॉक आकार है, और अगर ऐसा है, तो यह सबसे POSIX ओएस भौतिक डिस्क ब्लॉक आकार का पता लगाने में पोर्टेबल तरीका है।
मुझे नहीं लगता कि यह पॉज़िक्स के माध्यम से संभव है। –
मुझे आश्चर्य है कि 'st_blksize'' dev/null' के लिए क्या है। और मुझे आश्चर्य है कि यह * भौतिक * आकार या * तार्किक * आकार होगा। –
@DanMoulding '/ dev/null' एक वर्ण डिवाइस है, न कि ब्लॉक डिवाइस। – Petesh