在虚拟ramdisk中创建mmap

时间:2016-11-21 19:08:14

标签: c linux ramdisk

如何使用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);

1 个答案:

答案 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),就好像它是一个普通的文件。不要传递地址;将为您选择合适的一个。