2014-02-15 1 views
0

У меня есть программа на C++. Он находится на USB-накопителе. Как я могу определить путь/dev этого USB-накопителя? (из текущей текущей программы)Получить/dev/<whatever> USB-накопитель, содержащий исполняемый исполняемый файл C++

+0

argc [0] должен иметь полный исполняемый путь. Но тогда вам придется рыться вокруг с отображением этого исполняемого пути к смонтированным файловым системам –

+3

Это на самом деле неправильно. Во-первых, вы имели в виду argv [0]. Во-вторых, у него не будет полного пути, если исполняемый файл не будет запущен как полный путь. Если он был запущен как ./ (из текущего каталога), у вас его не будет. – Technologeeks

ответ

0

Предполагая, что вы находитесь в Linux (вы не указали, какую ОС). Вы можете получить полный исполняемый путь, посмотрев/proc/self/exe - обратите внимание, что проверка argv [0 ] не будет работать здесь (причина, описанная выше).

/proc/self/exe - это символическая ссылка на полный путь, который вызывается. «Я» - это символическая ссылка на ваш собственный pid, поэтому вам не нужно беспокоиться об этом. Пример:

[[email protected] frameworks]# ls -l /proc/self/exe 
lrwxrwxrwx. 1 root root 0 Feb 14 18:00 /proc/self/exe -> /usr/bin/ls 

Замечание 'ls' видит себя здесь. Различные процессы также будут видеть их полные пути.

Тогда вам нужно будет получить список смонтированных файловых систем (точно так же, как mount (1), используя getmntent (3)), и найти самый длинный путь точки монтирования (поле mnt_dir структуры ввода), которая является префиксом вашего имени exe. Это от mntent.h:

struct mntent { 
      char *mnt_fsname; /* name of mounted file system */ 
      char *mnt_dir;  /* file system path prefix */ 
      char *mnt_type;  /* mount type (see mntent.h) */ 
      char *mnt_opts;  /* mount options (see mntent.h) */ 
      int mnt_freq;  /* dump frequency in days */ 
      int mnt_passno; /* pass number on parallel fsck */ 
     }; 
+0

Можете ли вы описать это немного больше, может быть, некоторые примеры? – user2687781

+0

Просто добавленные примеры тоже. – Technologeeks

+0

Удивительно, это здорово, но что я передаю как 'FILE * fp'? также, да, я на UNIX :) – user2687781

Смежные вопросы