gpt4 book ai didi

cocoa - 查找文件句柄使用的媒体的自然 block 大小

转载 作者:行者123 更新时间:2023-12-03 17:45:37 25 4
gpt4 key购买 nike

我想找出 cocoa 应用程序中使用的 IO 介质的自然 block 大小。我在 IOMedia.cpp 中看到一个名为“getPreferredBlockSize()”的函数,据说它可以提供我的 block 大小。请你们解释一下如何在我的应用程序中使用此功能,或者是否有任何其他方法可以使用它来找到底层 IO 媒体的自然 block 大小。

谢谢

最佳答案

这是获取 native block 大小的代码:

#include <sys/stat.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/IOBSD.h>
#include <IOKit/storage/IOMedia.h>
#include <CoreFoundation/CoreFoundation.h>

// look up device number with stat
struct stat stats;
if (stat(path, &stats) != 0) {
return;
}
// use st_rdev instead of st_dev if
// the path is a device (/dev/disk0)
int bsd_major = major(stats.st_dev);
int bsd_minor = minor(stats.st_dev);

CFTypeRef keys[2] = { CFSTR(kIOBSDMajorKey), CFSTR(kIOBSDMinorKey) };
CFTypeRef values[2];
values[0] = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &bsd_major);
values[1] = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &bsd_minor);

CFDictionaryRef matchingDictionary;
matchingDictionary = CFDictionaryCreate(kCFAllocatorDefault,
&keys, &values,
sizeof(keys) / sizeof(*keys),
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);

CFRelease(values[0]);
CFRelease(values[1]);
// IOServiceGetMatchingService uses up one reference to the dictionary
io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault,
matchingDictionary);

if (!service) {
return;
}
CFNumberRef blockSizeProperty;
blockSizeProperty = (CFNumberRef)IORegistryEntryCreateCFProperty(service,
CFSTR(kIOMediaPreferredBlockSizeKey),
kCFAllocatorDefault, 0);
if (!blockSizeProperty) {
return;
}

int blockSize;
CFNumberGetValue(blockSizeProperty, kCFNumberIntType, &blockSize);
CFRelease(blockSizeProperty);

// blockSize is the native block size of the device

关于cocoa - 查找文件句柄使用的媒体的自然 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com