如何使用mmap在虚拟ramdisk中保留内存?让我们说:
mkdir /mnt/ramdisk
mount -t tmpfs -o size=10m tmpfs /mnt/ramdisk
我现在有一个虚拟ramdisk,但是如何在我的C程序中映射到它?
int main() {
// ....
addr = mmap(/* ramdisk address? */, size, PROT_READ_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
答案 0 :(得分:0)
while (true) {
try {
int num;
try {
// Blocking
num = selector.select();
}
catch (IOException e) {
e.printStackTrace();
continue;
}
if (num == 0)
continue;
Set<SelectionKey> keys = selector.selectedKeys();
Iterator<SelectionKey> it = keys.iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey)it.next();
// Client requires a connection
if (key.isAcceptable()) {
System.out.println("Socket connected!");
ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
SocketChannel sc;
try {
sc = (SocketChannel)ssc.accept();
}
catch (IOException e) {
e.printStackTrace();
ssc.close();
continue;
}
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
}
if (key.isReadable()) {
SocketChannel sc = (SocketChannel)key.channel();
// Read from the socket channel here
}
}
keys.clear();
}
catch (Exception e) {
e.printStackTrace();
}
}
是tmpfs的事实与你如何使用它没有任何关系。
如果您想要对该设备上的文件进行内存映射,您需要/mnt/ramdisk
一个文件并将其映射到open()
(而不是MAP_FILE
),就好像它是一个普通的文件。不要传递地址;将为您选择合适的一个。