Não é possível ler um arquivo específico no sistema de arquivos / sys

5

Enquanto pesquisava maneiras de obter várias informações de WiFi, encontrei o arquivo /sys/class/net/wlan7/speed . O problema é que, apesar de todas as permissões de leitura serem concedidas, não consigo lê-lo.

$ ls -l /sys/class/net/wlan7/speed                                                                                       
-r--r--r-- 1 root root 4096 3月  24 15:08 /sys/class/net/wlan7/speed

$ sudo cat /sys/class/net/wlan7/speed                                                                                    
[sudo] password for xieerqi: 
cat: /sys/class/net/wlan7/speed: Invalid argument

Eu posso registrar o arquivo, posso listar com ls , mas toda vez que tento lê-lo (com hexdump , com cat , com Python no modo de leitura binária, etc.) ele mostra um argumento inválido erro.

strace mostra que o erro aparentemente ocorre neste momento:

read(3, 0x7f6ad6b44000, 131072)         = -1 EINVAL (Invalid argument)
write(2, "cat: ", 5cat: )                    = 5
write(2, "/sys/class/net/wlan7/speed", 26/sys/class/net/wlan7/speed) = 26
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4

(link para pasta de traço completo: link )

Por outro lado, o arquivo correspondente para a interface ethernet funciona:

$ cat /sys/class/net/eth3/speed                              
10

Então, basicamente, minha pergunta é: como eu leio esse arquivo?

SO: Ubuntu 16.04 LTS, kernel 4.4.0-67 genérico, adaptador WiFi AR9565

    
por Sergiy Kolodyazhnyy 26.03.2017 / 11:14

1 resposta

6

O arquivo /sys/class/net/<iface>/speed é válido apenas para dispositivos que suportam o método ethtool get_settings , que se aplica principalmente a adaptadores Ethernet.

Para obter a velocidade de um dispositivo WiFi, você pode usar iwconfig ou iwlist .

iwconfig wlan7
iwlist wlan7 rate

Na documentação do Kernel:

What:       /sys/class/net/<iface>/speed
...  
Description:
        Indicates the interface latest or current speed value. Value is
        an integer representing the link speed in Mbits/sec.

        Note: this attribute is only valid for interfaces that implement
        the ethtool get_settings method (mostly Ethernet ).
    
por 26.03.2017 / 12:15