Was ist SYSCALL_DEFINE?

Hallo,

was bedeutet SYSCALL_DEFINE in Kernel? Ich habe die folgende Pseudocode aus fs/super.c kopiert. Kann jemand bitte mir diesen Abschnitt erklären.

SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf)
{
struct super_block *s;
struct ustat tmp;
struct kstatfs sbuf;
int err = -EINVAL;

s = user_get_super(new_decode_dev(dev));
if (s == NULL)
goto out;
err = vfs_statfs(s->s_root, &sbuf);
drop_super(s);
if (err)
goto out;

memset(&tmp,0,sizeof(struct ustat));
tmp.f_tfree = sbuf.f_bfree;
tmp.f_tinode = sbuf.f_ffree;

err = copy_to_user(ubuf,&tmp,sizeof(struct ustat)) ? -EFAULT : 0;
out:
return err;
}

Danke im Voraus

Guten Tag,

Hi,

siehe include/linux/syscalls.c . Da findest du SYSCALL_DEFINE in allen Varianten.

http://git.kernel.org/?p=linux/kernel/git/torvalds/l…

Dieses Makro ist zur vereinfachten Erstellung der Funktionsköpfe für Syscalls gedacht. Hier soll anscheinend der Funktionskopf für sys_ustat erstellt werden. Etwa so sieht dieser nach Anwendung des Makros aus:

asmlinkage long sys_ustat(unsigned dev, struct ustat __user *ubuf);

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]