2009-04-07 14 views
0

私はioctl()を呼び出すが、-1を返し、errnoをEPERMに設定するcプログラムを持っています。 しかし、私はそのファイルのモードを "777"に変更しました。ioctlは-1にerrnoをEPERMに設定して返します

ioctlが-1を返していて、なぜerrnoをEPERMに設定したのか教えてください。

ありがとうございます。

+0

あなたは何のパラメータ、およびどのようなデバイス上で、呼び出ししようとしているのioctlをお聞かせください。 ioctlはほとんど何でもできます。 – MarkR

+0

あなたはファイルの所有者ですか... sudo chown yournameを試してください – AIB

答えて

-1

いや、EPERM(操作が許可されていない)あなたは、liw.fiが提案operation.Asを実行root権限で実行してみてくださいまたは操作が何であるかを私たちに伝えるためにを十分な権限を持っていない示すエラー行われなければ。

0

ioctlを呼び出すデバイスには、要求された動作を実行する前に機能をチェックするコードが含まれている場合があります。この場合、特殊ファイルのパーミッションを777に設定するだけでは不十分です。問題のデバイスをサポートしているドライバのソースを掘り下げたい場合は、次のようなものを探して実際にどのような機能が必要かを調べることができます。

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

他の人が提案しているように、機能を読んだり、ルートとしてアプリケーションを実行することができます。

Linux Man Page for Capabilities

関連する問題