URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 91337
[ Назад ]

Исходное сообщение
"Изучение сорцов freebsd"

Отправлено Аноним , 08-Апр-11 13:54 
Сижу потихоньку изучаю сорцы, набрел на функцию statfs и не могу ее найти, в sys/sys/mount.h есть декларирование:

__BEGIN_DECLS
...
int     statfs(const char *, struct statfs *);
...
__END_DECLS

но тела функции ни где не нахожу.
В манах она выглядит немного по другому:
int statfs (const char *path struct statfs *buf);

Пинайте, плз, как угодно, только объясните где оно.


Содержание

Сообщения в этом обсуждении
"Изучение сорцов freebsd"
Отправлено Аноним , 08-Апр-11 14:09 
>[оверквотинг удален]
> найти, в sys/sys/mount.h есть декларирование:
> __BEGIN_DECLS
> ...
> int     statfs(const char *, struct statfs *);
> ...
> __END_DECLS
> но тела функции ни где не нахожу.
> В манах она выглядит немного по другому:
> int statfs (const char *path struct statfs *buf);
> Пинайте, плз, как угодно, только объясните где оно.

может это системный вызов? man statfs


"Изучение сорцов freebsd"
Отправлено Аноним , 08-Апр-11 14:11 
> может это системный вызов? man statfs

да, системный. но это же не значит, что тела функции быть не должно?


"Изучение сорцов freebsd"
Отправлено Вася , 08-Апр-11 14:24 
>> может это системный вызов? man statfs
> да, системный. но это же не значит, что тела функции быть не
> должно?

Ну, может в объектной библиотеке, уже полукомпилирована :)


"Изучение сорцов freebsd"
Отправлено t , 08-Апр-11 14:33 
>[оверквотинг удален]
> найти, в 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


"Изучение сорцов freebsd"
Отправлено Аноним , 08-Апр-11 14:45 
> Это часть 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 - лежит ман
но тела функции я так и не вижу


"Изучение сорцов freebsd"
Отправлено progger , 08-Апр-11 15:41 
>[оверквотинг удален]
> извиняюсь, но я либо плохо смотрю, либо чего-то не знаю. В /sys/kern/syscalls.master
> есть ее описание:
> 396     AUE_STATFS      STD
>     { int statfs(char *path, \
>            
>            
>            
>   struct statfs *buf); }
> в lib/libc/sys/statfs.2 - лежит ман
> но тела функции я так и не вижу

тело в функции в ядре
научитесь пользоватся поиском по соурсам


"Изучение сорцов freebsd"
Отправлено Аноним , 08-Апр-11 15:57 
> тело в функции в ядре
> научитесь пользоватся поиском по соурсам

а можно пальчиком тыкнуть?

# 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,


"Изучение сорцов freebsd"
Отправлено gpl77 , 08-Апр-11 16:53 
> а можно пальчиком тыкнуть?

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)


"Изучение сорцов freebsd"
Отправлено Аноним , 08-Апр-11 17:14 
>[оверквотинг удален]
> ./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, то какой код отрабатывает? где он лежит?


"Изучение сорцов freebsd"
Отправлено gpl77 , 08-Апр-11 17:22 
>>[оверквотинг удален]
>.. а может я не понимаю, потому что я не
> си-шник, но я не вижу там структуры описанной в мане: statfs(const
> char *path, struct statfs *buf);

вы искали тело функции.
вот оно.
почему оно выглядит не так, как вы предполагаете - изучайте, собственно, "сырцы"
ну, или, немножко про С почитайте.


"Изучение сорцов freebsd"
Отправлено Аноним , 10-Апр-11 09:20 
> ну, или, немножко про С почитайте.

Благодарю, разобрался.


"Изучение сорцов freebsd"
Отправлено progger , 08-Апр-11 18:27 
> когда управление передается statfs, то какой код отрабатывает? где он лежит?

странный вы человек
если вы узучаете, так изучайте самостоятельно
в конце концов есть книга freebsd inside
ее почитайте