2009-04-07 14 views
0

Ich habe ein c-Programm, das ioctl() aufruft, aber es gibt -1 und errno auf EPERM zurück. Aber ich habe den Modus dieser Datei auf "777" geändert.ioctl return -1 mit errno gesetzt auf EPERM

Können Sie mir bitte sagen, warum ioctl immer noch -1 zurückgibt, während errno auf EPERM gesetzt ist?

Vielen Dank.

+0

Sagen Sie uns, was ioctl Sie versuchen, nennen mit den Parametern, und auf welchem ​​Gerät. ioctl kann fast alles machen. – MarkR

+0

Sind Sie der Besitzer der Datei ... Versuchen Sie sudo chown yourname – AIB

Antwort

-1

Ja, EPERM Fehler (Betrieb nicht erlaubt) zeigen, haben Sie nicht ausreichende Berechtigungen die operation.As liw.fi vorgeschlagen auszuführen, versuchen Sie mit Root-Rechten ausführen oder uns sagen, was die Operation getan werden.

0

Das Gerät, an dem Sie ioctl aufrufen, enthält möglicherweise Code, der nach Funktionen sucht, bevor die angeforderte Aktion ausgeführt wird. Das Festlegen der Berechtigungen für die spezielle Datei auf 777 reicht in diesem Fall nicht aus. Wenn Sie nach der Quelle für den Treiber suchen möchten, der das fragliche Gerät unterstützt, können Sie nach dem Folgenden suchen, um herauszufinden, welche Funktion tatsächlich benötigt wird.

if (! capable (CAP_SYS_ADMIN)) 
    return -EPERM; 

Möglicherweise möchten Sie auf Fähigkeiten lesen oder einfach nur Ihre Anwendung als root ausführen, wie andere vorgeschlagen haben.

Linux Man Page for Capabilities

Verwandte Themen