It's open(2).
Yes, here on my x86_64 it can be hooked.
But I've seen lots of setups where this was not doable.
As I said it depends how the libc's wrapper is written.
So an app calls the open() function. This results in an unresolved symbol which the run-time linker matches up with the open() exported by glibc. glibc then does the open() syscall.
If libc implements it, then it is by definition in section 3.
EDIT: (signing out of this sub-thread)
Have you ever called a system call by hand using assembly?
Have you ever looked at glibc's source?
Habe you ever looked at the kernel's close() syscall?