Я использую dtrace для записи всех удаляемых файлов.
Можно ли узнать, что является целью символической ссылки (если это символическая ссылка)? Я хочу вывести имя файла символической ссылки и имя целевого файла для ведения журнала на случай, если мне понадобится восстановить ссылку позже.
Одно из решений, которое я придумал, состоит в том, чтобы использовать «системную» функцию dtrace для вызова моей собственной программы, которая распечатает цель символической ссылки: system («myprogram %s»), где %s — это полное имя символической ссылки, которую я хочу напечатать. из цели для.
Это работает нормально (это очень короткая программа на C, и она выполняет свою работу), но есть ли способ получить информацию непосредственно через dtrace, учитывая, что мы все равно обрабатываем файл, и мы должны иметь возможность искать цель символической ссылки?
Я просмотрел структуру fileinfo_t, но у нее нет цели символической ссылки: http://docs.oracle.com/cd/E18752_01/html/817-6223/chp-io-args.html.#chp-io-fileinfo
Это мой сценарий на данный момент: это в Solaris 10. (Это проверка fop_remove, а не syscall::unlink, и причина этого заключается в том, чтобы иметь возможность получить каталог символической ссылки в случае, если пользователь не указывает каталог в звонок в рм).
#!/usr/sbin/dtrace -s
#pragma D option quiet
fbt::fop_remove:entry
{
self->dir = stringof(args[0]->v_path);
self->file = stringof(args[1]);
}
fbt::fop_remove:return
/self->file != NULL/
{
printf("%s/%s\n", self->dir, self->file);
self->file = 0;
self->dir = 0;
}
Спасибо!