Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> どのようにLinuxシステム環境情報U-スワップ対応を取得します

どのようにLinuxシステム環境情報U-スワップ対応を取得します

  
                  Uディスクまたは取得した情報を引っ張っする従来の方法は、カーネルレベルの手順でホットプラグを実行しているに、環境変数を通じて、関連するパラメータが渡さ取得し、その後、ホットプラグで他の興味ホットプラグアプリケーションに通知します。そのようなアプローチは幾分低い効率、今ソケットネットリンクの特殊なタイプを介して情報へのアクセスのUディスクスワップを実現します。非同期通信のカーネル空間とユーザ空間のために設計されたネットリンク。以下の実施例は、カーネル・ホットプラグ・イベント、ソースコードを監視することができ、以下の通りである:
の#include< stdio.hの>の#include< STDLIB.H>の#include< string.hの>の#include<のctype.h>#含める< SYS /un.h>の#include< SYS /ioctl.h>の#include< SYS /socket.hに>の#include<リナックス/types.hで>の#include<リナックス/netlink.h>#含める< ERRNO.H>の#define UEVENT_BUFFER_SIZE 2048static INT init_hotplug_sock(ボイド); int型のmain(int型ARGC、CHAR * ARGV []){int型hotplug_sock = init_hotplug_sock();一方、(1){チャーBUF [UEVENT_BUFFER_SIZE * 2] = {0}; RECV(hotplug_sock、&#038; BUF、はsizeof(BUF)、0);のprintf( "%Sの\\ n"、BUF);}戻り0;}静的INT init_hotplug_sock(ボイド){構造体sockaddr_nl SNL;のconst int型×1024×1024 BUFFERSIZE = 16; INT RETVAL;のmemset(&#038; SNL、0x00で、はsizeof(構造体sockaddr_nl)); snl.nl_family = AF_NETLINK; snl.nl_pid = GETPID(); snl.nl_groups = 1; INT hotplug_sock =ソケット(PF_NETLINK、SOCK_DGRAM、NETLINK_KOBJECT_UEVENT); IF(hotplug_sock == -1){のprintf( "エラーソケットを取得します。%S" はstrerror(errnoに)); -1を返す;} /*集合r eceive BUFFERSIZE * /のsetsockopt(hotplug_sock、SOL_SOCKET、SO_RCVBUFFORCE、&#038; BUFFERSIZE、はsizeof(BUFFERSIZE)); RETVAL =バインド(hotplug_sock、(構造体のsockaddr *)&#038; SNL、はsizeof(構造体sockaddr_nl)); IF(RETVAL< 0 ){のprintf( "バインドに失敗しました:%s" は、はstrerror(errnoに));近い(hotplug_sock); hotplug_sock = -1;戻り-1;}戻りhotplug_sock;}
						
Copyright © Windowsの知識 All Rights Reserved