[Python-de] Verändert os.walk die access time?
Tobias Klausmann
klausman at schwarzvogel.de
Don Mar 17 00:00:28 CET 2005
Hi!
On Wed, 16 Mar 2005, "Martin v. Löwis" wrote:
> >Gerade komme ich doch selbst auf den Fehler: i[0] gibt natürlich nur das
> >Verzeichnis wieder, nicht den Dateinamen. Und die atime vom Verzeichnis
> >scheint sich beim os.walk() tatsächlich zu verändern, was IMHO richtig ist.
>
> Nein, ist es nicht. os.walk sollte nur stat(2) aufrufen, und stat(2)
> sollte die atime nicht ändern. Man muss auf den Dateiinhalt zugreifen
> (etwa mit open(2) oder execv(2)) um die atime zu ändern.
Wie kommt man wohl an die Liste der Dateien in einem Verzecihnis?
Mit open("somedir"). Und voila, neue atime.
Siehe auch:
$ mkdir -p foo/bar/baz
$ cd foo/
$ ls -la --time=atime
total 40
drwxrwxr-x 3 klausman users 4096 Mar 16 23:56 .
drwxr-xr-x 114 klausman users 16384 Mar 16 23:55 ..
drwxrwxr-x 3 klausman users 4096 Mar 16 23:55 bar
$ date
Wed Mar 16 23:56:15 CET 2005
$ ls bar
baz
$ ls -la --time=atime
total 40
drwxrwxr-x 3 klausman users 4096 Mar 16 23:56 .
drwxr-xr-x 114 klausman users 16384 Mar 16 23:55 ..
drwxrwxr-x 3 klausman users 4096 Mar 16 23:56 bar
Beziehungsweise:
$ strace ls bar 2>&1 >/dev/null|grep bar
execve("/usr/bin/ls", ["ls", "bar"], [/* 61 vars */]) = 0
stat64("bar", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
open("bar", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
$
Gruss,
Tobias
--
export DISPLAY=vt100