Próbuję wyświetlić nazwę pliku poprzez kgdb, więc nie mogę wywoływać funkcji i makr, aby uzyskać programowo. Muszę go znaleźć ręcznie, sprawdzając struktury danych.W systemie Linux, jak mogę uzyskać nazwę pliku od struktury "struct file", podczas przechodzenia przez jądro z kgdb?
Jakbym miał punkt przerwania tutaj w gdb, jak mógłbym rozejrzeć się z gdb i znaleźć nazwę pliku?
Próbowałem rozglądać się w filp.f_path
, filp.f_inode
itp. Nie widzę nazwy pliku w dowolnym miejscu.
ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
{
struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
struct kiocb kiocb;
ssize_t ret;
init_sync_kiocb(&kiocb, filp);
kiocb.ki_pos = *ppos;
kiocb.ki_left = len;
kiocb.ki_nbytes = len;
ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos);
if (-EIOCBQUEUED == ret)
ret = wait_on_sync_kiocb(&kiocb);
*ppos = kiocb.ki_pos;
return ret;
}
OK Stephan, wiem, że to jest osobne pytanie, ale próbowałem dowiedzieć się, jak kontrolować podświetlanie składni kodu lub co najmniej rozpoznawanie kodu przez miesiące i nie znalazłem odpowiedzi. Jak to naprawiłeś, żeby rozpoznać, gdzie zaczął się mój kod c? –
[Pomoc do edycji znaczków] (http://stackoverflow.com/editing-help) –
Po otwarciu pliku system plików wyszukuje i-węzeł z pozycji katalogu, a następnie zapomina o wszystkim oprócz i-węzła; nie ma bezpośredniego połączenia. Z powodu mechanizmów takich jak twarde łącza, 'unlink' i' O_TMPFILE', może istnieć zero lub wiele nazw plików dla 'struct file'. –