精华内容
下载资源
问答
  • 获取当前局域网所有连接设备的ip地址和mac地址

    万次阅读 多人点赞 2021-07-03 16:53:18
    今天我们计划实现通过Python读取当前局域网所有连接设备的IP地址和Mac地址。 基本原理: 通过ipconfig /all 命令获取局域网所在的网段 通过arp -d *命令清空当前所有的arp映射表 循环遍历当前网段所有可能的ip...

    大家好,我是小小明。

    今天我们使用python调用几个网络操作相关的命令,并基于此做出些小玩具。

    学习计划:

    1. 通过ipconfig /all 命令获取局域网所在的网段
    2. 通过arp -d *命令清空当前所有的arp映射表
    3. 循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表
    4. 通过arp -a命令读取缓存的映射表获取所有与本机连接的设备的Mac地址。

    计划实现案例:

    1. 读取当前局域网网段下所有连接设备的IP地址和Mac地址。
    2. 分析设备的上下线。

    CMD命令

    获取本机ip地址和网段

    通过ipconfig /all 命令获取本机ip和局域网所在的网段:

    C:\Windows\system32>ipconfig /all
    
    Windows IP 配置
    
       主机名  . . . . . . . . . . . . . : DESKTOP-IS8QJHF
       主 DNS 后缀 . . . . . . . . . . . :
       节点类型  . . . . . . . . . . . . : 混合
       IP 路由已启用 . . . . . . . . . . : 否
       WINS 代理已启用 . . . . . . . . . : 否
    
    以太网适配器 以太网:
    
       连接特定的 DNS 后缀 . . . . . . . :
       描述. . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller
       物理地址. . . . . . . . . . . . . : F0-2F-74-82-0F-B0
       DHCP 已启用 . . . . . . . . . . . : 是
       自动配置已启用. . . . . . . . . . : 是
       本地链接 IPv6 地址. . . . . . . . : fe80::4453:3c08:3332:32de%5(首选)
       IPv4 地址 . . . . . . . . . . . . : 192.168.3.31(首选)
       子网掩码  . . . . . . . . . . . . : 255.255.255.0
       获得租约的时间  . . . . . . . . . : 2021年7月3日 8:55:32
       租约过期的时间  . . . . . . . . . : 2021年7月3日 20:55:31
       默认网关. . . . . . . . . . . . . : 192.168.3.1
       DHCP 服务器 . . . . . . . . . . . : 192.168.3.1
       DHCPv6 IAID . . . . . . . . . . . : 82849652
       DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-27-EC-F1-A5-F0-2F-74-82-0F-B0
       DNS 服务器  . . . . . . . . . . . : 101.226.4.6
                                           114.114.114.114
       TCPIP 上的 NetBIOS  . . . . . . . : 已启用
    

    清空arp映射表

    通过arp -d *命令清空当前所有的arp映射表:

    C:\Windows\system32>arp -d *
    
    C:\Windows\system32>arp -a
    
    接口: 192.168.3.31 --- 0x5
      Internet 地址         物理地址              类型
      192.168.3.1           c0-b8-e6-4b-82-cd     动态
      224.0.0.22            01-00-5e-00-00-16     静态
      239.11.20.1           01-00-5e-0b-14-01     静态
    
    C:\Windows\system32>arp -a
    
    接口: 192.168.3.31 --- 0x5
      Internet 地址         物理地址              类型
      192.168.3.1           c0-b8-e6-4b-82-cd     动态
      192.168.3.22          3c-7c-3f-80-07-d0     动态
      224.0.0.22            01-00-5e-00-00-16     静态
      239.11.20.1           01-00-5e-0b-14-01     静态
    

    可以看到清空后马上查到的地址不一样。

    Ping局域网所有可能的设备

    在命令行中我们可以通过如下命令实现:

    for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%i
    

    192.168.3改成前面查询到的网段。

    不过在Python中,我们只需使用python自己的for循环即可。

    上述命令执行过程中:

    image-20210703150700223

    查看当前在线的设备

    在将上面命令执行过一遍过,ARP命令便能够查看当前网段内在线的设备:

    image-20210703150908516

    经实际测试大概只有几秒的延迟便能够感知设备的上线(刚联网的设备会向该网段发送广播),但无法自动感知到设备的下线,除非主动Ping目标ip发现ping不通,目标ip才会从arp表中删除。

    Python实现

    下面,我们用Python执行这些命令:

    1. 通过ipconfig /all 命令获取局域网所在的网段
    2. 通过arp -d *命令清空当前所有的arp映射表
    3. 循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表
    4. 通过arp -a命令读取缓存的映射表获取所有与本机连接的设备的Mac地址。

    获取局域网所在的网段

    以下代码根据系统ipconfig /all命令返回的结果进行文本处理:

    with os.popen("ipconfig /all") as res:
        for line in res:
            line = line.strip()
            if line.startswith("IPv4"):
                ipv4 = map(int, re.findall("(\d+)\.(\d+)\.(\d+)\.(\d+)", line)[0])
            elif line.startswith("子网掩码"):
                mask = map(int, re.findall("(\d+)\.(\d+)\.(\d+)\.(\d+)", line)[0])
                break
    net_segment = ".".join([str(i & j) for i, j in zip(ipv4, mask)]).strip(".0")
    net_segment
    
    '192.168.3'
    

    注意:若你的系统执行返回的结果与前面cmd命令的结果不一样,则需要根据实际情况修改代码。

    当前我们实际只会使用最后一个位置作为网段,并不需要考虑子网掩码,所有可以简化代码:

    with os.popen("ipconfig /all") as res:
        for line in res:
            line = line.strip()
            if line.startswith("IPv4"):
                net_segment = re.findall("(\d+\.\d+\.\d+)\.\d+", line)[0]
                break
    net_segment
    
    '192.168.3'
    

    清空映射表

    这步必须具有管理员权限,否则会执行失败:

    import os
    
    os.system("arp -d *")
    

    Ping局域网所有可能的设备

    for i in range(1, 255):
        os.system(f"ping -w 1 -n 1 {net_segment}.{i}")
    

    不过上述命令耗时2分钟:

    image-20210703160851106

    感觉太慢了,我们考虑使用多线程并发执行或多进程并行执行实现加速。

    对于多进程,经测试在开启5个线程时耗时是30秒,8个线程是28秒:

    from concurrent.futures import ThreadPoolExecutor
    
    with ThreadPoolExecutor(max_workers=5) as executor:
        for i in range(1, 255):
            executor.submit(os.system, f"ping -w 1 -n 1 {net_segment}.{i}")
    

    继续增大线程,并不能明显加快执行速度。

    试试多进程:

    from concurrent.futures import ProcessPoolExecutor
    import psutil
    
    # 逻辑cpu个数
    count = psutil.cpu_count()
    with ProcessPoolExecutor(count) as executor:
        for i in range(1, 255):
            executor.submit(os.system, f"ping -w 1 -n 1 {net_segment}.{i}")
    

    结果耗时31秒,设置4倍的进程数也仅仅只能提升到25秒,与多线程的速度相差不大,不如直接多线程。

    结论:使用多线程设置5-8个线程最佳。能由2分钟提升到30秒,直到慢慢达到性能瓶颈。

    获取当前在线设备ip和mac地址

    通过解析arp命令的结果即可:

    header = None
    with os.popen("arp -a") as res:
        for line in res:
            line = line.strip()
            if not line or line.startswith("接口"):
                continue
            if header is None:
                header = re.split(" {2,}", line.strip())
                break
        df = pd.read_csv(res, sep=" {2,}", names=header, header=0, engine='python')
    
    print(df.shape)
    df.head()
    

    获得36条连接数据:

    image-20210703163955852

    封装代码

    下面我们封装一下上述操作:

    import os
    import re
    import time
    from concurrent.futures import ThreadPoolExecutor
    
    import pandas as pd
    
    
    def get_net_segment():
        with os.popen("arp -a") as res:
            for line in res:
                line = line.strip()
                if line.startswith("接口"):
                    net_segment = re.findall(
                        "(\d+\.\d+\.\d+)\.\d+", line)[0]
                    break
        return net_segment
    
    
    def clean_arp():
        os.system("arp -d *")
    
    
    def ping_net_segment_all(net_segment):
        # for i in range(1, 255):
        #     os.system(f"ping -w 1 -n 1 {net_segment}.{i}")
        with ThreadPoolExecutor(max_workers=4) as executor:
            for i in range(1, 255):
                executor.submit(os.popen, f"ping -w 1 -n 1 {net_segment}.{i}")
    
    
    def get_arp_ip_mac():
        header = None
        with os.popen("arp -a") as res:
            for line in res:
                line = line.strip()
                if not line or line.startswith("接口"):
                    continue
                if header is None:
                    header = re.split(" {2,}", line.strip())
                    break
            df = pd.read_csv(res, sep=" {2,}",
                             names=header, header=0, engine='python')
        return df
    

    有了这些方法,我们完成最后的目标:

    分析局域网设备上下线

    思路

    1. 程序启动时,扫描本网段所有可能的ip尝试建立连接。
    2. 获取在线ip地址列表
    3. 每隔10秒尝试ping一次之前在线的ip,获取下线状态
    4. 重新获取IP地址列表与前一次对比,获取设备的上下线状态

    为了第3条方便实现,我们实现一个方法:

    def ping_ip_list(ips, max_workers=4):
        with ThreadPoolExecutor(max_workers=max_workers) as executor:
            future_tasks = []
            for ip in ips:
                future_tasks.append(executor.submit(os.popen, f"ping -w 1 -n 1 {ip}"))
            wait(future_tasks, return_when=ALL_COMPLETED)
    

    逻辑代码

    if __name__ == '__main__':
        # 是否进行初始扫描
        init_search = False
        if init_search:
            print("正在扫描当前网段所有ip,预计耗时1分钟....")
            ping_net_segment_all(get_net_segment())
    
        last = None
        while 1:
            df = get_arp_ip_mac()
            df = df.loc[df.类型 == "动态", ["Internet 地址", "物理地址"]]
            if last is None:
                print("当前在线的设备:")
                print(df)
            else:
                online = df.loc[~df.物理地址.isin(last.物理地址)]
                if online.shape[0] > 0:
                    print("新上线设备:")
                    print(online)
                offline = last[~last.物理地址.isin(df.物理地址)]
                if offline.shape[0] > 0:
                    print("刚下线设备:")
                    print(offline)
            time.sleep(5)
            ping_ip_list(df["Internet 地址"].values)
            last = df
    

    完整代码

    import os
    import re
    import time
    from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
    
    import pandas as pd
    
    
    def get_net_segment():
        with os.popen("arp -a") as res:
            for line in res:
                line = line.strip()
                if line.startswith("接口"):
                    net_segment = re.findall(
                        "(\d+\.\d+\.\d+)\.\d+", line)[0]
                    break
        return net_segment
    
    
    def ping_net_segment_all(net_segment):
        # for i in range(1, 255):
        #     os.system(f"ping -w 1 -n 1 {net_segment}.{i}")
        with ThreadPoolExecutor(max_workers=4) as executor:
            for i in range(1, 255):
                executor.submit(os.popen, f"ping -w 1 -n 1 {net_segment}.{i}")
    
    
    def get_arp_ip_mac():
        header = None
        with os.popen("arp -a") as res:
            for line in res:
                line = line.strip()
                if not line or line.startswith("接口"):
                    continue
                if header is None:
                    header = re.split(" {2,}", line.strip())
                    break
            df = pd.read_csv(res, sep=" {2,}",
                             names=header, header=0, engine='python')
        return df
    
    
    def ping_ip_list(ips, max_workers=4):
        print("正在扫描在线列表")
        with ThreadPoolExecutor(max_workers=max_workers) as executor:
            future_tasks = []
            for ip in ips:
                future_tasks.append(executor.submit(os.popen, f"ping -w 1 -n 1 {ip}"))
            wait(future_tasks, return_when=ALL_COMPLETED)
    
    
    if __name__ == '__main__':
        # 是否进行初始扫描
        init_search = False
        if init_search:
            print("正在扫描当前网段所有ip,预计耗时1分钟....")
            ping_net_segment_all(get_net_segment())
    
        last = None
        while 1:
            df = get_arp_ip_mac()
            df = df.loc[df.类型 == "动态", ["Internet 地址", "物理地址"]]
            if last is None:
                print("当前在线的设备:")
                print(df)
            else:
                online = df.loc[~df.物理地址.isin(last.物理地址)]
                if online.shape[0] > 0:
                    print("新上线设备:")
                    print(online)
                offline = last[~last.物理地址.isin(df.物理地址)]
                if offline.shape[0] > 0:
                    print("刚下线设备:")
                    print(offline)
            time.sleep(5)
            ping_ip_list(df["Internet 地址"].values)
            last = df
    

    结果示例:

    当前在线的设备:
         Internet 地址               物理地址
    0    192.168.3.3  3c-7c-3f-83-e2-7c
    1   192.168.3.10  3c-7c-3f-80-08-1b
    2   192.168.3.25  f0-2f-74-82-15-7e
    3   192.168.3.26  f0-2f-74-82-15-a2
    4   192.168.3.28  f0-2f-74-82-15-38
    5   192.168.3.29  f0-2f-74-82-15-d0
    6   192.168.3.32  f0-2f-74-82-15-3b
    7   192.168.3.33  f0-2f-74-82-15-56
    8   192.168.3.39  a8-5e-45-16-79-99
    9  192.168.3.225  30-24-a9-5a-eb-82
    新上线设备:
        Internet 地址               物理地址
    9  192.168.3.52  3c-7c-3f-c2-cd-cb
    刚下线设备:
        Internet 地址               物理地址
    9  192.168.3.52  3c-7c-3f-c2-cd-cb
    
    展开全文
  • 同一个账号在多台设备登录,如何判断在当前登录的设备已同步了服务器的数据到本地库?
  • 在执行device discovery之前,最好在配对的设备列表中查看所要发现的设备是否已经存在。通过调用getBondedDevices()函数可以获得代表已经配对的设备的BluetoothDevice集合。 例如,你可以查询所有已经配对的设备...

    在执行device discovery之前,最好在已配对的设备列表中查看所要发现的设备是否已经存在。通过调用getBondedDevices()函数可以获得代表已经配对的设备的BluetoothDevice集合。 例如,你可以查询所有已经配对的设备,然后通过一个ArrayAdapter添加和显示每个设备的名字给用户:

    //得到所有已配对的蓝牙适配器对象
    	Set<BluetoothDevice> devices = adapter.getBondedDevices();
    		if(devices.size()>0){
    			for(Iterator iterator = devices.iterator();iterator.hasNext();){
    					BluetoothDevice bluetoothDevice = (BluetoothDevice) iterator.next();
    					//得到远程已配对蓝牙设备的mac地址
    					System.out.println(bluetoothDevice.getAddress());
    				}
    为了建立一个连接,需要才能够BluetoothDevice对象中获取的是MAC地址。在这个例子中,MAC地址作为显示给用户的ArrayAdapter的一部分存储。只要有需要,可以把MAC地址提取出来。

    展开全文
  • Android开发 获取系统连接蓝牙设备

    千次阅读 2018-09-10 11:29:04
    根据公司最近一个项目的需求,我们的APP要与蓝牙低功耗设备进行连接,不过有些情况系统蓝牙会默认连接配对的设备,这样就会导致我们的APP搜索不到这些系统连接的设备,从而导致APP无法与之进行连接并进行接...

       根据公司最近一个项目的需求,我们的APP要与蓝牙低功耗设备进行连接,不过有些情况下系统蓝牙会默认连接已配对的设备,这样就会导致我们的APP搜索不到这些系统已连接的设备,从而导致APP无法与之进行连接并进行接下来的操作。其实系统连接与我们的APP连接并不冲突,问题就在于如何找到并显示出系统已连接的设备。网上搜索了一堆方法都不行,要么是只能找到已绑定的设备,要么就是操作无效。好在后来终于找到有人通过反射获取系统已连接设备的方法,特此记录,如果谁有更好的方法还请指教。

     

     
    1. BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

    2. Class<BluetoothAdapter> bluetoothAdapterClass = BluetoothAdapter.class;//得到BluetoothAdapter的Class对象

    3. try {//得到连接状态的方法

    4. Method method = bluetoothAdapterClass.getDeclaredMethod("getConnectionState", (Class[]) null);

    5. //打开权限

    6. method.setAccessible(true);

    7. int state = (int) method.invoke(adapter, (Object[]) null);

    8.  
    9. if(state == BluetoothAdapter.STATE_CONNECTED){

    10. Log.i("BLUETOOTH","BluetoothAdapter.STATE_CONNECTED");

    11. Set<BluetoothDevice> devices = adapter.getBondedDevices();

    12. Log.i("BLUETOOTH","devices:"+devices.size());

    13.  
    14. for(BluetoothDevice device : devices){

    15. Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null);

    16. method.setAccessible(true);

    17. boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null);

    18. if(isConnected){

    19. Log.i("BLUETOOTH","connected:"+device.getName());

    20. deviceList.add(device);

    21. }

    22. }

    23. }

    24.  
    25. } catch (Exception e) {

    26. e.printStackTrace();

    27. }

    转载连接:https://blog.csdn.net/gh8609123/article/details/66969006

    展开全文
  • 因为keil不能下载程序了,芯片中因为之前下过一次当前程序之后才不能再下载程序的,所以一上电就在跑当前的程序,所以先使用STM32 ST-LINK Utility工具将之前芯片中的程序擦除: 关闭STM32 ST-LINK Utility...

    报错

    No  target   connected

    Error:  Flash  Download   failed   -  Target  DLL   has  been   cancelled

    Connection   to   device   is   lost:   check  power  supply  and   debug   connection.

    If   the  target  is  in  low  power  mode,  please   enable  "Debug  in  Low  Power Mode"  option  from  Target->settings  menu.

     

    背景:

    使用STM32F429,STlink下载程序,keil for  arm进行编程,原本一切正常,下载了一次程序之后,在keil中再也找不到设备,但是STLink显示驱动、连接等一切都正常,使用STM32 ST-LINK Utility工具也能正常连接,但同样的程序还是下载不进去,如下列图所示:

    keil中显示没有设备连接

     查看计算机设备管理器中,确定STLink驱动和连接没问题:

    计算机设备管理中显示STLink连接正常

    点击下载程序时就会出现下面的报错: 

                      

    使用 STM32 ST-LINK Utility工具(ST-Link Utility点击下载),可以正常连接,可以擦除存储器的内容,但是一下载当前的程序bin文件,就会出现各种报错:

     

    问题原因:

    在各种网上查找之后,发现有网友说到下载口的引脚是PA13和PA14,突然想起我的当前程序,为了方便,随便用了两个引脚,就是PA13和PA14,于是赶紧查看芯片手册,并且修改程序,将PA13和PA14引脚换成了别的引脚,如下图:

    解决方法:

    因为keil不能下载程序了,芯片中因为之前下过一次当前程序之后才不能再下载程序的,所以一上电就在跑当前的程序,所以先使用STM32 ST-LINK Utility工具将之前芯片中的程序擦除:

    关闭STM32 ST-LINK Utility工具,然后再打开keil,查看,就发现找到了已连接的设备,如下:

    问题解决!

     

     

     

     

    展开全文
  • android 打开蓝牙设备 显示已经配对的蓝牙设备 ,并将配对的蓝牙设备显示在textview中
  • Android手机连接蓝牙设备后,不能通过搜索再次搜到,网上各种方法试了均无效,反射机制也用了没啥用,哪位大神可以帮忙
  • 用户名称用户的机器名称或tty号远程主机地址用户登录系统的时间空闲时间(作用不大)附加到tty(终端)的进程所用的时间(JCPU时间)当前进程所用时间(PCPU时间)用户当前正在使用的命令 w命
  • 当我们在用VS进行串口编程时,在打开串口前,经常想知道当前PC上存在多少个串口,哪些串口可用?哪些串口已经打开了,最好是在一个Combo Box中列表系统当前所有可用的串口以供选择,然而如何获取系统当前可用的串口...
  • SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinDemons. All rights reserved. 本文将在CSDN由作者KylinDemons、在酷安由...
  • 关键来了:要把我们之前修改的权限全部改过来: 再次温习一下步骤: 进入PE后 到c:\windows\system32 (1) 更改Magnify.exe 和cmd.exe 的所有者为:administrators (2) 更改Magnify.exe 和cmd.exe...
  • 你有没有想在Linux的文件管理系统中再创建一个文件系统,就像在Windows中创建一个新的磁盘分区那样(但其实并不必非得直接那么做)。这时你就需要用到回环设备(loop device)。在Linux中,回环设备允许用户以一个...
  • Linux从未停歇脚步。Linus Torvalds,世界上最伟大的程序员之一,Linux内核的创始人,Git的缔造者,仍然在没日没夜的合并补丁,升级内核。做技术,从来没有终南捷径,拼...我见许许多多的Linux工程师,他们的简历...
  • Linux使用USB模拟ACM串口设备

    万次阅读 2017-01-05 16:48:07
    这个想法之前就在脑袋里有,最近公司产品要用到,所以多做了些了解。 1. USB 简介 USB 是 Universal Serial Bus 的缩写,从字面上看,就是通用串行总线的意思。从物理上看,其实就是一对差分线,连接两台设备后...
  • Ubuntu和Windows设备共享

    千次阅读 2016-06-21 22:24:34
    http://blog.csdn.net/pipisorry/article/details/51725942蓝牙设备如键盘、鼠标都可以。装的双系统win7和Ubuntu,如果只使用一个系统,蓝牙鼠标配对一次后可以正常使用,...皮皮blog安装蓝牙模块{电脑自带蓝牙的略}l
  • 其一,移动设备配置越来越高,一些高端配置和桌面设备接近;其二,用户对于移动设备使用场景的多样性与日俱增。现在移动设备不仅用于娱乐日用,还用于工作;其三,安全与隐私问题日益凸显。移动设备上有更多的隐私...
  • 设备指纹是用来标识手机或者浏览器的唯一 ID,我们能够通过这个 ID 关联到手机或浏览器相关的全部数据。因此设备指纹是风控系统中最核心的数据来源。 那设备指纹是如何对手机进行追踪的?又是如何判定异常.
  • (一)驱动程序介绍 (a)Linux驱动程序学习 ... 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现 open, close,read和 write 系统调用。 ②块设备:  在大部分的 Unix...
  • Datasheet中写的DMACxBREQ信号线,就是设备的控制器,如果支持DMA,都会有此信号线接出来的,这样,接到DMA的对应的DMACxBREQ引脚上,这样,如果设备控制器,发现当前的条件,满足DMA burst传输,比如FIFO一共36个...
  • 在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。 下面...
  • ulimint -a 用来显示当前的各种用户进程限制 Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况, 设置个Linux用户的最大进程数,一些需要设置为无限制: 数据段长度:ulimit -d ...
  • 当打开VIs时,您可能收到错误“LabVIEW载入错误代码10:VI版本旧不能转换为当前LabVIEW版本”。 如果您希望将LabVIEW 6.0版本之前的VI更新,请按照如下步骤执行: 如果为LabVIEW 4.0 之前 的版本: 您...
  • 当前目录查找包含 hello 字符串的 后缀名为 .c 的文件: find . -name "*.c" | xargs grep -H "hello" 附:(转) 1. Grep简介 Grep (global search regular expression(RE) and print out the line,全面...
  • 最近,游戏SDK要集成iap苹果内购,但是很担心越狱机安装一些iap free之类的工具来刷,干脆就限制越狱设备进行iap支付好了。那如何检测设备是否为越狱设备呢?代码如下: - (BOOL)myIap_isJailbroken { //以下...
  • 字符设备驱动理解

    千次阅读 2012-11-25 15:16:43
     C库中通过open/read/write/seek等来操作文件,所谓字符设备驱动,简单来说就是实现这几个函数的具体内容,linux能把设备抽象为文件,用户调用open/read/write/seek对抽象的文件进行操作就可以操作实际硬件设备(或...
  • 为了增强移动端的登录机制验证,保证数据的安全性,报表工具提供了移动设备绑定的功能,每个系统用户在使用移动端连接系统的时,需要管理员授权,将用户的移动设备与系统绑定起来,如果管理员没有给设备授权,则无法...
  • who命令用于列举出当前已登录系统的用户名称。其输出为:用户名、tty号、时间日期、主机地址。 $ who ramesh pts/0 2009-03-28 22:57 (dev-db-server) jason pts/1 2009-03-28 23:01 (dev-db-server) ...
  • rt-thread的IO设备管理系统源码分析

    千次阅读 2013-02-19 16:19:24
    rt-thread的IO设备管理模块为应用提供了一个对设备进行访问的通用接口,,并通过定义的数据结构对设备驱动程序和设备信息进行管理。从系统整体位置来说I/O管理模块相当于设备驱动程序和上层应用之间的一个中间层。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,209
精华内容 83,683
关键字:

当前设备已下过单