Сижу потихоньку изучаю сорцы, набрел на функцию statfs и не могу ее найти, в sys/sys/mount.h есть декларирование:__BEGIN_DECLS
...
int statfs(const char *, struct statfs *);
...
__END_DECLSно тела функции ни где не нахожу.
В манах она выглядит немного по другому:
int statfs (const char *path struct statfs *buf);Пинайте, плз, как угодно, только объясните где оно.
>[оверквотинг удален]
> найти, в sys/sys/mount.h есть декларирование:
> __BEGIN_DECLS
> ...
> int statfs(const char *, struct statfs *);
> ...
> __END_DECLS
> но тела функции ни где не нахожу.
> В манах она выглядит немного по другому:
> int statfs (const char *path struct statfs *buf);
> Пинайте, плз, как угодно, только объясните где оно.может это системный вызов? man statfs
> может это системный вызов? man statfsда, системный. но это же не значит, что тела функции быть не должно?
>> может это системный вызов? man statfs
> да, системный. но это же не значит, что тела функции быть не
> должно?Ну, может в объектной библиотеке, уже полукомпилирована :)
>[оверквотинг удален]
> найти, в sys/sys/mount.h есть декларирование:
> __BEGIN_DECLS
> ...
> int statfs(const char *, struct statfs *);
> ...
> __END_DECLS
> но тела функции ни где не нахожу.
> В манах она выглядит немного по другому:
> int statfs (const char *path struct statfs *buf);
> Пинайте, плз, как угодно, только объясните где оно.Это часть libc. Определения смотрите тут:
/sys/kern/syscalls.c и /sys/kern/syscalls.masterи /usr/src/lib/libc
> Это часть libc. Определения смотрите тут:
> /sys/kern/syscalls.c и /sys/kern/syscalls.master
> и /usr/src/lib/libcизвиняюсь, но я либо плохо смотрю, либо чего-то не знаю. В /sys/kern/syscalls.master есть ее описание:
396 AUE_STATFS STD { int statfs(char *path, \
struct statfs *buf); }
в lib/libc/sys/statfs.2 - лежит ман
но тела функции я так и не вижу
>[оверквотинг удален]
> извиняюсь, но я либо плохо смотрю, либо чего-то не знаю. В /sys/kern/syscalls.master
> есть ее описание:
> 396 AUE_STATFS STD
> { int statfs(char *path, \
>
>
>
> struct statfs *buf); }
> в lib/libc/sys/statfs.2 - лежит ман
> но тела функции я так и не вижутело в функции в ядре
научитесь пользоватся поиском по соурсам
> тело в функции в ядре
> научитесь пользоватся поиском по соурсама можно пальчиком тыкнуть?
# grep -R 'int.*statfs.*(.*char.*path' /usr/src/
/usr/src/sys/amd64/linux32/syscalls.master:99 AUE_STATFS STD { int linux_statfs(char *path, \
/usr/src/sys/amd64/linux32/syscalls.master:268 AUE_STATFS STD { int linux_statfs64(char *path, size_t bufsize, struct l_statfs64_buf *buf); }
/usr/src/sys/compat/freebsd32/syscalls.master:157 AUE_STATFS COMPAT4 { int freebsd32_statfs(char *path, \
/usr/src/sys/compat/freebsd32/syscalls.master:396 AUE_STATFS NOPROTO { int statfs(char *path, \
/usr/src/sys/i386/ibcs2/syscalls.master:35 AUE_STATFS STD { int ibcs2_statfs(char *path, \
/usr/src/sys/i386/linux/syscalls.master:99 AUE_STATFS STD { int linux_statfs(char *path, \
/usr/src/sys/i386/linux/syscalls.master:268 AUE_STATFS STD { int linux_statfs64(char *path, size_t bufsize, struct l_statfs64_buf *buf); }
/usr/src/sys/kern/syscalls.master:157 AUE_STATFS COMPAT4 { int statfs(char *path, \
/usr/src/sys/kern/syscalls.master:396 AUE_STATFS STD { int statfs(char *path, \
/usr/src/sys/sys/syscallsubr.h:int kern_statfs(struct thread *td, char *path, enum uio_seg pathseg,
> а можно пальчиком тыкнуть?grep -R statfs.\*\)\$
....
./kern/vfs_mount.c:__vfs_statfs(struct mount *mp, struct statfs *sbp)
./kern/vfs_syscalls.c:statfs_scale_blocks(struct statfs *sf, long max_size)
./kern/vfs_syscalls.c:statfs(td, uap)
./kern/vfs_syscalls.c: struct statfs *buf)
./kern/vfs_syscalls.c:fstatfs(td, uap)
./kern/vfs_syscalls.c:kern_fstatfs(struct thread *td, int fd, struct statfs *buf)
./kern/vfs_syscalls.c:freebsd4_statfs(td, uap)
./kern/vfs_syscalls.c:freebsd4_fstatfs(td, uap)
./kern/vfs_syscalls.c:freebsd4_fhstatfs(td, uap)
./kern/vfs_syscalls.c:cvtstatfs(nsp, osp)
./kern/vfs_syscalls.c:fhstatfs(td, uap)
./kern/vfs_syscalls.c:kern_fhstatfs(struct thread *td, fhandle_t fh, struct statfs *buf)
>[оверквотинг удален]
> ./kern/vfs_syscalls.c: struct statfs *buf)
> ./kern/vfs_syscalls.c:fstatfs(td, uap)
> ./kern/vfs_syscalls.c:kern_fstatfs(struct thread *td, int fd, struct statfs *buf)
> ./kern/vfs_syscalls.c:freebsd4_statfs(td, uap)
> ./kern/vfs_syscalls.c:freebsd4_fstatfs(td, uap)
> ./kern/vfs_syscalls.c:freebsd4_fhstatfs(td, uap)
> ./kern/vfs_syscalls.c:cvtstatfs(nsp, osp)
> ./kern/vfs_syscalls.c:fhstatfs(td, uap)
> ./kern/vfs_syscalls.c:kern_fhstatfs(struct thread *td, fhandle_t fh, struct statfs
> *buf)может я дурачек, а может я не понимаю, потому что я не си-шник, но я не вижу там структуры описанной в мане: statfs(const char *path, struct statfs *buf);
давайте по другому, например в /usr/src/lib/libc/gen/fstab.c есть функция с использованием statfs:
fixfsfile()
{
static char buf[sizeof(_PATH_DEV) + MNAMELEN];
struct stat sb;
struct statfs sf;if (strcmp(_fs_fstab.fs_file, "/") != 0)
return;
if (statfs("/", &sf) != 0)
return;
...когда управление передается statfs, то какой код отрабатывает? где он лежит?
>>[оверквотинг удален]
>.. а может я не понимаю, потому что я не
> си-шник, но я не вижу там структуры описанной в мане: statfs(const
> char *path, struct statfs *buf);вы искали тело функции.
вот оно.
почему оно выглядит не так, как вы предполагаете - изучайте, собственно, "сырцы"
ну, или, немножко про С почитайте.
> ну, или, немножко про С почитайте.Благодарю, разобрался.
> когда управление передается statfs, то какой код отрабатывает? где он лежит?странный вы человек
если вы узучаете, так изучайте самостоятельно
в конце концов есть книга freebsd inside
ее почитайте