www.mikrocontroller.net

Forum: PC-Programmierung cygwin: stat access modify change


Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe gerade ein Experiment gemacht
hier ist das Bash Skript
#!/usr/bin/bash

[ -e data ] && echo "datei existiert bereits" && exit 1
touch data
stat data | tail -3
echo
#postcondition: alle zeiten gleich =: X

sleep 10
chmod 755 data
stat data | tail -3
echo
#postcondition: change hat einen 10 sec alteren wert (X+10)

sleep 10
echo "1 2 3" >> data
stat data | tail -3
echo
#postcondition: modify hat einen 20 sec alteren wert (X+20)

sleep 10
cat data
stat data | tail -3
#postcondition: access hat einen 30 sec alteren wert (X+30)


und hier die Ergebnisse
$ ./sk.sh
Access: 2010-11-27 21:10:31.108964300 +0100
Modify: 2010-11-27 21:10:31.108964300 +0100
Change: 2010-11-27 21:10:31.106945200 +0100

Access: 2010-11-27 21:10:31.108964300 +0100
Modify: 2010-11-27 21:10:31.108964300 +0100
Change: 2010-11-27 21:10:41.371950400 +0100

Access: 2010-11-27 21:10:31.108964300 +0100
Modify: 2010-11-27 21:10:51.550955400 +0100
Change: 2010-11-27 21:10:51.550955400 +0100

1 2 3
Access: 2010-11-27 21:10:31.108964300 +0100
Modify: 2010-11-27 21:10:51.550955400 +0100
Change: 2010-11-27 21:10:51.550955400 +0100

Meine Erwartungen sind im Skript als "postconditions"
festgehalten.
chmod ändert erwartungsgemäss "change time", die als letzte
der 3-Zeilen erscheint.
Ein append ist eigentlich ein write und damit ein modify ..
würde ich erwarten. Seltsamerweise ändert sich "change time" nochmal.
Und zuletzt lese ich die Datei einfach mit cat. Allerdings
ändert sich, wie man sehen kann, dabei gar nichts.

Ich habe das unter Cygwin getestet. Deswegen meine Frage ..
verstehe ich die Semantik von access/modify/change falsch?
Werden beim "echo >>" syscalls getätigt die change time ändern?
Oder liegt es schlicht an cygwin (da nicht ext3 Dateisystem)
Vielleicht kann jemand unter Linux das Skript testen.

Grüsse

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel -------- schrieb:
> Ein append ist eigentlich ein write und damit ein modify ..
> würde ich erwarten. Seltsamerweise ändert sich "change time" nochmal.

Das ist nicht seltsam, das ist normal.

Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mich nach diesen Infos gerichtet

There are 3 kind of "timestamps":

* Access - the last time the file was read
* Modify - the last time the file was modified (content has been 
modified)
* Change - the last time meta data of the file was changed (e.g.
permissions)

http://unix.stackexchange.com/questions/2802/what-...

Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier nochmal etwas genauer
st_atime is the access time, updated on read(2) calls (and probably also 
when open(2) opens a file for reading) -- it is NOT updated when files are 
read via mmap(2). (Which is why I assume open(2) will mark the access time.)

st_mtime is the data modification time, either via write(2) or truncate(2) 
or open(2) for writing. (Again, it is NOT updated when files are written 
via mmap(2).)

st_ctime is the metadata modification time: when any of the other data in 
the struct stat gets modified.

Quelle: 
http://stackoverflow.com/questions/3385203/regardi...

demnach müsste doch "access time" beim "cat data" aktualisiert werden.

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann gurgle ich mal für Dich ;-)

<< Note that ctime has nothing to do with file creation time. It is 
updated any time file content changes (together with mtime), and also by 
changes in metadata such as file permissions, file ownership, and 
creation and deletion of hard links. In some implementations, ctime is 
affected by renaming a file (both original Unix and modern Linux tend to 
do this).
Unlike atime and mtime, ctime cannot be set with utime() (as used e.g. 
by touch); the only way to set it to an arbitrary value is by changing 
the system clock. >>

Quelle: <<http://en.wikipedia.org/wiki/Stat_(Unix)%20


Abgesehen davon ^^^, hat Deine Datei nach

  echo "1 2 3" >> data

eine andere Größe, also andere "Metadaten".
Alleine das wäre schon eine Änderung von ctime wert...

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte ich übersehen:

Daniel -------- schrieb:
> demnach müsste doch "access time" beim "cat data" aktualisiert werden.

Nur auf POSIX konformen Systemen
(steht aber bestimmt auch in dem Link da oben ^^^)

Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst im Abschnitt "Criticism of atime"?
Scheinbar verzichtet Cygwin aus diesem Grund auf Updates von atime.
Ok. Danke für die wiki Seite.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.