Date: Fri, 25 Jun 1999 18:55:03 -0700 (PDT) From: Linus Torvalds <torvalds@transmeta.com> To: Wolfgang Walter <wolfgang.walter@stusta.mhn.de> Subject: Re: [RFC] File flags handling - proposal for API. On Sat, 26 Jun 1999, Wolfgang Walter wrote: > > - how to avoid that applications not prepared for that do not use > > fp = open(<directory>, O_RDONLY) > > If this silently opens the 'default' file, they may do not fail but > instead do something stupid. But that's exactly what happens now. Have you ever done a grep xxxxx * in a directory that has subdirectories? It will open the directory (because right now we allow it to happen even without O_DIRECTORY), but then when it reads it will get an error and will print out grep: yyyy: Is a directory which is obviously just not what the user meant. So what is to say that what the user _meant_ was not to open the "default" file for that directory? No, I'm not 100% convinced it is a good idea. But I _am_ conviced that if people want to test it out, they should just do so, and then when we have a better feel for whether it makes any real sense or not can we judge better. For example, I would _like_ to have something like this: PATH=~/bin:$PATH and then in my bin directory I'd have my own binaries, some of them with their own configuration files. For example, it could look like this: ~/bin/netscape default -> /usr/local/bin/netscape cache/ config cookies/ and when somebody executes ~/bin/netscape (which is a directory with a shorthand - the shorthand just happens to be _another_ shorthand, namely a symlink), they actually end up _executing_ /usr/local/bin/netscape through the shorthands, and netscape could be taught to look at argv[0] as the location for it's own config files. So then I could have two versions of netscape, each with its own configuration and cache, and there would be no clashes due to both trying to populate my home directory. More importantly, I wouldn't ever even have to _see_ the files, except if I went out searching. Think of it as the concept of dot-files, but taken to a higher level: dot-files are there to hide the details, but quite frankly they don't do all that good a job of it, and then when you occasionally want to look at one of them and do the normal ls -ld .??* you end up in shock. Wouldn't it be much nicer to just do ls ~/bin/netscape/ (note the ending slash) and magically just get all the config and other files associated with THAT particular netscape configuration. Again, maybe it's horrible. But It's intriguing enough that I think it's worth at least trying. > - This is more general: how do I know that I have to use O_DIRECTORY? > Doing lstat(), then open() and then fstat() is not atomic. > Following situation: > > - lstat() says it is a file > - file ist moved and replaced by directory > - I use open() without O_DIRECTORY, because I think its a file > - now I silently open the default-file So what's the problem? You expected to open a file, and you opened a file. that can happen today. The fact that somebody renamed something from under you meant that you got a different file than the one you thought you'd get, but that is exactly the behaviour you have today. Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/