[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