Линукс, пути к системным папкам и носителям.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Линукс, пути к системным папкам и носителям.

Сообщение qivi »

Как получить в линукс пути к папкам:
1. Персональный каталог залогиненого в данный момент пользователя;
2. Его рабочий стол;
3. Его документы (учитывая что у кого то они названы по русски а у когото по английски персональный_каталог+'Документы' надо полагать не прокатит).
4. Мой компьютер (не совсем нативное явление для Линукс, но у меня в меню-перейти есть)

И как получить список всех подключенных носителей (диски, флешки, приводы)?
eevee
новенький
Сообщения: 63
Зарегистрирован: 29.12.2009 16:52:44
Откуда: Саратов

Сообщение eevee »

1.

Код: Выделить всё

var home_path: string;
..
home_path := ExpandFileName('~/');

2. Зависит от дистрибутива, если не ошибаюсь. Но в основном встречаю каталог Desktop

Код: Выделить всё

var desktop_path: string;
..
desktop_path := ExpandFileName('~/')+'Desktop';

3. Нет, тут нельзя ничего однозначно сказать, у каждого своё.
4. Нет такого понятия вообще. Графическая оболочка KDE предоставляет "Мой компьютер" как сборник всех дисков, шарных папок и тд и тп. Но это - отдельная программа. Данное не прокатит, к примеру, в оболочке Xfce4

Код: Выделить всё

cat /proc/mounts
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

qivi писал(а):1. Персональный каталог залогиненого в данный момент пользователя;

Код: Выделить всё

var
  HomeDir: String;
begin
  HomeDir:= GetEnvironmentVariable('HOME');   
  .....

qivi писал(а):2. Его рабочий стол;
3. Его документы (учитывая что у кого то они названы по русски а у когото по английски персональный_каталог+'Документы' надо полагать не прокатит).

Если дистрибутив использует xdg-user-dirs, то можно выцепить из файла

Код: Выделить всё

$HOME/.config/user-dirs.dirs
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

eevee писал(а):1.

Код: Выделить всё

cat /proc/mounts


А как этим воспользоваться? Что бы скажем выбрать устройство для просмотра его содержимого?
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

И как получить список всех подключенных носителей (диски, флешки, приводы)?

/etc/fstab
eevee
новенький
Сообщения: 63
Зарегистрирован: 29.12.2009 16:52:44
Откуда: Саратов

Сообщение eevee »

fstab - это файл для автомонтирования устройств при загрузке.

Сейчас широко распространен HAL, и все устройства, монтированные с помощью HAL, в fstab не прописываются

to qivi

Код: Выделить всё

eevee@compaq ~ $ cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,noatime,errors=continue,data=writeback 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
udev /dev tmpfs rw,nosuid,relatime,size=10240k,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620 0 0
/dev/sda4 /home ext3 rw,noatime,errors=continue,data=writeback 0 0
shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0
usbfs /proc/bus/usb usbfs rw,nosuid,noexec,relatime,devgid=85,devmode=664 0 0
binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0

первое значение - устройство. второе значение - точка монтирования.

как открыть в Лазарусе - не знаю... Можно использовать как вариант TProcess с любимым файловым менеджером
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Можно использовать как вариант TProcess с любимым файловым менеджером

может лучше вывод сразу распарсить как в теме "Как считать MAC-адрес??". Там даже пример есть
eevee
новенький
Сообщения: 63
Зарегистрирован: 29.12.2009 16:52:44
Откуда: Саратов

Сообщение eevee »

P.S. Вот мой fstab

Код: Выделить всё

eevee@compaq ~ $ cat /etc/fstab
# /etc/fstab: static file system information.
#
# <fs>         <mountpoint>   <type>      <opts>         <dump/pass>

/dev/sda1                   /boot               ext2                 noauto,noatime   1 0
/dev/sda2           none              swap              sw                      0 0
/dev/sda3       /             ext3              noatime              0 1
/dev/sda4      /home      ext3              noatime         0 2

shm         /dev/shm   tmpfs      nodev,nosuid,noexec   0 0


Как видите, тут нет ни флешек, ни dvd-приводов, хотя и то и то работает на ура

Добавлено спустя 2 минуты:
Padre_Mortius, прежде чем что то хаить, предложили бы лучший вариант. Единственный Ваш ответ - fstab, который как мертвому припарка
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Я бы лучше использовал

в нем меньше ненужной информации, типа параметров монтирования данного тома
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Блин... так и не понял как можно получить список всех устройств что б переключатся между ними програмно...
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Что-то типа такого. переделал пример из указанной темы в блокноте без проверки. Могут быть ошибки

Код: Выделить всё

Var
  aProcess: TProcess;
  aStrings: TStringList;
  aString, aBuffer: String;
  i: Integer;
begin
  aProcess := TProcess.Create(Nil);
  aProcess.Commandline := 'mount';
  aProcess.Options := [poUsePipes,poNoConsole];
  aProcess.Execute;
  SetLength(aBuffer, 2000);
  Repeat
    i := aProcess.Output.Read(aBuffer[1], Length(aBuffer));
    aString := aString + Copy(aBuffer, 1, i);
  Until i = 0;
  aProcess.Free;
  aStrings := TStringList.Create;
  aStrings.Text := aString;
  //дальше делать разбор aStrings при необходимости
  aStrings.Free;
end.
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Спасибо разбираюсь.
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

для того чтобы узнать что примонтировано читать /etc/mtab
man libc open http://www.opennet.ru/man.shtml?topic=open&category=2&russian=0
man libc read http://www.opennet.ru/man.shtml?topic=read&category=2&russian=0
man linc close http://www.opennet.ru/man.shtml?topic=close&category=2&russian=0
Далее парсинг данных

Добавлено спустя 3 минуты 11 секунд:
Рабочий стол http://forum.ubuntu.ru/index.php?topic=19054.0

Добавлено спустя 10 минут 42 секунды:
для гнома мой компьютер "живет" в /.gconf/apps/nautilus/desktop-metadata
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

coyot.rush писал(а):для того чтобы узнать что примонтировано читать /etc/mtab
man libc open http://www.opennet.ru/man.shtml?topic=o ... &russian=0
man libc read http://www.opennet.ru/man.shtml?topic=r ... &russian=0
man linc close http://www.opennet.ru/man.shtml?topic=c ... &russian=0
Далее парсинг данных

Для чтения и парсинга файлов '/etc/fstab' и '/etc/mtab' в libc есть специальные функции: setmntent, getmntent, endmntent. Как их использовать можно посмотреть в манах (также можно глянуть пример их использования в исходниках DC)
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

Alexx2000 где можно почитать доку по системным вызовам, в систематизированным виде (наподобие MS SDK).
Лучше http://www.opennet.ru ничего пока не нашел, но сайт хорош когда заешь что искать, ну и разумеется исходники DC
Ответить