Я не думаю, что можно сделать это. Оболочки в наше время отслеживают то, как они добрались, где они, они отслеживают текущий рабочий каталог по имени, вместо того, чтобы просто полагаться на файловую систему и ОС для хранения его. Это означает встроенное cd
может пойти "создают резервную копию" символьной ссылки, вместо только после ".." цепочки непосредственно.
Но когда Вы работаете ls ../foo
, ls
не знает, что оболочка добралась до каталога, перейдя по символьным ссылкам. ls
сделает a stat()
на "../нечто" ".." часть прибывает из текущего каталога, который имеет только сингл ".." запись, поскольку это - родитель. Целая вещь символьной ссылки не изменяет способ, которым каталоги имеют сингл "." и сингл ".." запись. Символьные ссылки позволяют ядру вставить дополнительный слой косвенности в пути к файлам. Когда Вы передаете "../независимо от того, что" open()
или stat()
, ядро просто использует текущий рабочий каталог процесса, делающего вызов для выяснения, которым называют единственный каталог "..".
Сначала определите свой файл устройств микрофона; должно быть что-то подобное /dev/snd/pcmC0D0c
. Чтобы помочь Вам найти файл устройств, можно запустить тестовую запись с arecord
или такой, затем сделайте lsof | grep '/dev/snd'
; это перечислит все программы и их связанный файл устройств.
Затем можно посмотреть использование использования микрофона fuser /dev/snd/pcmC0D0c
. Это возвратит PID программы, получающей доступ к устройству, если упомянутое устройство будет открыто.
Можно предпочесть циклично выполняться на inotifywait /dev/snd/pcmC0D0c
альтернативно, для обнаружения изменений в состоянии вместо того, чтобы постоянно опросить устройство относительно состояния.
Поле owner_pid
в procfs
файл status
из шоу устройства PCM, какая программа открыла его:
$ grep owner_pid /proc/asound/card*/pcm*/sub*/status
/proc/asound/card2/pcm0p/sub0/status:owner_pid : 1803
$ ps -p 1803
PID TTY TIME CMD
1803 pts/0 00:00:00 aplay