POSIX находит все локальные файлы

Используя Intrinsics может решить Вашу проблему получения WM_WINDOW_ROLE и WM_NAME.

6
12.06.2013, 01:38
2 ответа

Я не полагаю, что существует любой способ определить, является ли файловая система удаленной или локальная использующий только интерфейсы POSIX. POSIX не делает даже мандата a mount команда и все ссылки на файловые системы, насколько я знаю, переполнены "определенными реализацией" словами.

-local основной к find команда не является большим количеством справки, так как это только доступно на Солярисе, и она зависит от существования конфигурационного файла, который перечисляет типы удаленной файловой системы.

POSIX делает мандат a df управляйте и требует определенного выходного формата, если та команда используется с -P флаг; в том формате существует шесть разделенных пробелом полей, из которых первым является "название файловой системы в определенном формате реализации", и последней является точка монтирования.

То, в чем Вы нуждаетесь, является списком всех точек монтирования, соответствующих локальным файловым системам. Здесь, я думаю, что Вы оказываетесь перед необходимостью отступать к эвристике; который должен исключить имена файловой системы, которые похожи" на удаленные файловые системы. Некоторые примеры:

//...     CIFS (Samba)
host:...  NFS
/afs      AFS

Это не исчерпывающий список, и он прибывает полностью без гарантий.

Если Вы затем фильтруете те строки из вывода df и затем удалите первые пять столбцов, Вы могли затем подать список к find команда с -xdev основной.

Даже если это звучит вероятным, нет на самом деле никакой гарантии, что файловая система на самом деле "смонтирована" (см. AFS), или что файловая система является или совершенно локальной или совершенно удаленной (основанная на предохранителе файловая система может произвольно перенаправить отдельные файлы). Поэтому соблюдите осторожность, мой совет.

2
27.01.2020, 20:30

Это -xdev работы, но возможно не, как Вы хотели бы, т.е., как указано в POSIX find человек: find -xdev выполнения до FS с различнымDevice ID (мог быть осмотрен с stat утилита или stat() systemcall), встречен:

например. linux:

# stat /home/foo
  File: `/home/foo'
    . . .
Device: fd02h/64770d
  . . .
 # stat /boot/foo
  File: `/boot/foo'
  . . . 
Device: 801h/2049d   
  . . .

Давайте найдем его с -xdev:

# find / -xdev -name foo -print
#

без:

# find / -name foo -print
/home/foo
/boot/foo

  

Осмотр Device ID на Solaris:

# truss -t lstat64 -v lstat64 ls /foo
lstat64("/foo", 0xFFBFFC48)
    d=0x02580000 . . .
# truss -t lstat64 -v lstat64 ls /etc/foo
lstat64("/etc/foo", 0xFFBFFB88)
    d=0x02580000 . . .
# truss -t lstat64 -v lstat64 ls /opt/foo
lstat64("/opt/foo", 0xFFBFFC48)
    d=0x02580004 . . .
0
27.01.2020, 20:30

Теги

Похожие вопросы