2017-07-04 102 views
0

我有一個運行Linux Angstrom的嵌入式設備。我需要檢測一個USB驅動器。所以當插入USB驅動器時,我需要自動將數據從USB複製到嵌入式設備的內部存儲器。C程序檢測Linux中的USB驅動器

檢測USB,我使用下面的代碼:

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 angstrom。所以只有通用的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; 
} 
相關問題