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

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

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

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

Сообщение qivi » 05.04.2010 15:35:24

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

И как получить список всех подключенных носителей (диски, флешки, приводы)?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение eevee » 05.04.2010 16:55:45

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
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

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

Сообщение Alexx2000 » 05.04.2010 18:22:17

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

Код: Выделить всё
var
  HomeDir: String;
begin
  HomeDir:= GetEnvironmentVariable('HOME');   
  .....

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

Если дистрибутив использует xdg-user-dirs, то можно выцепить из файла
Код: Выделить всё
$HOME/.config/user-dirs.dirs
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение qivi » 05.04.2010 19:06:04

eevee писал(а):1.
Код: Выделить всё
cat /proc/mounts


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

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

Сообщение Padre_Mortius » 05.04.2010 19:13:17

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

/etc/fstab
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение eevee » 05.04.2010 19:29:12

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 с любимым файловым менеджером
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

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

Сообщение Padre_Mortius » 05.04.2010 19:35:19

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

может лучше вывод сразу распарсить как в теме "Как считать MAC-адрес??". Там даже пример есть
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение eevee » 05.04.2010 19:36:01

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, который как мертвому припарка
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

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

Сообщение Padre_Mortius » 05.04.2010 19:45:35

Я бы лучше использовал
Код: Выделить всё
mount

в нем меньше ненужной информации, типа параметров монтирования данного тома
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение qivi » 05.04.2010 19:50:50

Блин... так и не понял как можно получить список всех устройств что б переключатся между ними програмно...
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение Padre_Mortius » 05.04.2010 20:00:33

Что-то типа такого. переделал пример из указанной темы в блокноте без проверки. Могут быть ошибки
Код: Выделить всё
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.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение qivi » 05.04.2010 20:21:30

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

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

Сообщение coyot.rush » 05.04.2010 23:31:15

для того чтобы узнать что примонтировано читать /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
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

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

Сообщение Alexx2000 » 06.04.2010 00:13:18

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)
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение coyot.rush » 06.04.2010 19:32:59

Alexx2000 где можно почитать доку по системным вызовам, в систематизированным виде (наподобие MS SDK).
Лучше http://www.opennet.ru ничего пока не нашел, но сайт хорош когда заешь что искать, ну и разумеется исходники DC
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru