2017-11-09 5 views
2

私はこのコードを書き留めます。QTのumount()関数が機能しません

int removeUSB = umount("/media/pi/USB_Device"); 
if(!removeUSB) 
    qDebug()<<"USB is removed."; 
else 
    qDebug()<<"USB is not removed." 

USBはremoved.I'm撮影デバッグ画面にメッセージを「USBが削除されていない」ことはできません。 私は何が欠けていますか?すべての回答ありがとうございます。

答えて

0

あなたが呼んでいるumount関数はQT関数ではなく、glibcライブラリによって提供される関数だと思います。参照:umount(2)のマニュアルページとglibc documentation for mount/umount

これらのページの両方とも、アンマウントコールが成功しなかった場合、-1を返し、グローバル変数errnoにエラーコードを設定します。エラーコードはerrnoのマニュアルページにあります。

次のようにして、エラーを見ることができる:

if(umount("/media/pi/USB_Device")) 
    qDebug()<<"Error removing USB Deviced: " << strerror(errno); 
else 
    qDebug()<<"USB is removed." 

strerror関数は人間が読める文字列にエラーコードを変換します。デバイスをアンマウントすることができないため

考えられる理由は次のとおりです。

  • あなたのプロセス、または他のいくつかのプロセスを、errnoに返された場合には、デバイス内のファイルのオープンは、EBUSYだろう可能性があります。コマンドlsofは、どのプロセスがファイルシステムをビジー状態にしているかを判断するのに非常に役立ちます。

  • プロセスを実行しているユーザーが必要な権限を持っていない可能性があります。この場合、エラーコードはEPERMになります。

+0

あなたが言ったようなコードを書き直しました。私はデバッグ画面で「許可されていない操作」の許可メッセージを受け取りました。この問題をどのように解決できますか? – Gkhan

+0

それは私の答えで述べたエラーEPERMです。プロセスが実行されているユーザーは、アンマウントする権限がありません。 rootとして実行してみてください。 – harmic

関連する問題