tags:

views:

58

answers:

2

How do I call the lstat system call in linux/c, not the lstat wrapper around it (lstat(3))? There is no SYS_lstat for syscall(SYS_lstat...

+2  A: 

Perhaps you have incomplete headers, SYS_lstat is listed in /usr/include/bits/syscall.h on my Ubuntu 10.4 system.

#define SYS_lstat __NR_lstat

Then in asm/unistd_64.h:

#define __NR_lstat                              6

Or perhaps asm/unistd_32.h:

#define __NR_lstat              107

Hope that helps.

eclark
I have it on CentOS 5 as well.
cHao
it is in the headers on mine as well but the compiler still does not recognise it.
BobTurbo
+3  A: 

If you're using the syscall directly, you need to make sure your definition of struct stat and the kernel's definition agree. Also if you're on a 32-bit machine you should probably never use the deprecated lstat syscall but instead the lstat64 one, since the former will fail on large files. These and numerous other issues are why it's a bad idea to make syscalls yourself instead of using the standard library; the latter wraps around all the legacy compatibility cruft and gives you a standards-compliant POSIX interface.

R..