2017-07-04 7 views
0

私はLinuxのAngstromを実行している組み込みデバイスを持っています。私はUSBドライブを検出する必要があります。だから、USBドライブが挿入されると、USBから組み込み機器の内部メモリにデータを自動的にコピーする必要があります。 USBを検出するLinuxでUSBドライブを検出するCプログラム

、私はコードの下に使用しています:

DIR* dir = opendir("/media/sda1/"); 
if (dir) 
{ 
    printf("USB detected\n"); 
    //rest of the code 
    //to copy data from the USB 
} 

コピーが行われた後、これは通常、時には動作しますが、私はUSBを除去するが、マウントポイント(SDA1)の名前が残っています。だから、USBを取り外した後、データがコピーされます(sda1がメディアに入っているので)、物理的なUSBが接続されていないのでエラーが表示されます。 USBが接続されているかどうかを検出し、正しく接続されているかどうかを検出する最も良い方法は何ですか?ここではudisksを使用することはできません。なぜなら、この埋め込みデバイスに使用しているLinux用には使用できないからです。したがって、一般的なlinuxコマンドだけが動作します。

助けてください。おかげ

+1

あなたはudevを取得しますか?もしそうなら、あなたはudevルールで何かをすることができます。 – Joe

+0

USBの物理的なプラグが正しく検出されない可能性があるため、コピー転送が実行された後に、USBをプログラムでアンマウントする可能性があります。 – JTejedor

+0

@JTejedor 'umount/media/sda1'を使って正しくアンマウントしましたが、それでもまだそこに残っていることがあります。なぜ私は別のアプローチを探しているのですか? –

答えて

0

一つの単純なアプローチは、以下の通りです:

  • 出力を解析mount | grep /dev/sda1
  • を実行します。sda1

にマウントされていないことを意味しているあなたがする必要があり、出力がない場合特定のプラットフォームにコードを適合させます。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    /* launch a command and gets its output */ 
    FILE *f = popen("mount | grep /dev/sda1", "r"); 
    if (NULL != f) 
    { 
     /* test if something has been outputed by 
      the command */ 
     if (EOF == fgetc(f)) 
     { 
      puts("/dev/sda1 is NOT mounted"); 
     } 
     else 
     { 
      puts("/dev/sda1 is mounted"); 
     }   
     /* close the command file */ 
     pclose(f);   
    } 
    return 0; 
} 
関連する問題