Date: Mon, 4 Jun 2007 18:24:30 +0200 From: Roman Divacky <rdivacky@freebsd.org> To: arch@freebsd.org Subject: *at family of syscalls in FreeBSD Message-ID: <20070604162430.GA76813@freebsd.org>
next in thread | raw e-mail | index | archive | help
Hi, Starting from Linux 2.6.16, there is available so called *at syscalls. For example openat(), linkat() etc. Those syscalls are used to avoid races in threaded programs and to implement per-thread CWD. in other words they are usefull. Thats why Linux implemented them. I am currently implementing those in our Linuxulator. As suggested by Robert Watson I implemented general kern_fooat() functions and wrapped them around those kern_fooat() functions. It works ok and everything. But I want to introduce native *at syscalls for FreeBSD binaries. Hence I am here to discuss the API. My suggestion: use Linux API with some slight naming changes: syscalls: openat(), mkdirat(), mknodat(), chownat(), utimesat(), statat(), unlinkat(), renameat(), linkat(), symlinkat(), readlinkat(), chmodat(), accessat(). example of a syscall: int openat(int dirfd, char *path, int flags, int mode); ie. exactly the same API as Linux have with the exception of naming them sanely, ie. instead for example fchownat() we have chownat() because it does not operate on a fd but on a path. I am not sure about compatibility but we can always introduce a weak reference like fchownat() -> chownat(). I want to have special AT_FDCWD -100 define for "cwd" argument, just like linux. I am currently finishing my linuxulator-side work and I'd like to see this in 7.0R so please comment on the API and the idea of introducing those syscalls in FreeBSD. thank you Roman Divacky
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070604162430.GA76813>