pl: Bug in stat()?

problematische Seite

ctime == mtime ? kann gar nicht sein. Is Bug?

PHPv5.3

MFG

  1. problematische Seite

    Hallo pl,

    http://linux-club.de/wiki/opensuse/Zeitstempel_von_Dateien

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
    1. problematische Seite

      Hallo Matthias,

      http://linux-club.de/wiki/opensuse/Zeitstempel_von_Dateien

      Fälschlicher Weise wird ctime oftmals mit Create Time übersetzt und somit herrscht über diesen Zeitstempel oftmals eine ganz falsche Vorstellung. Mit diesem Zeitstempel wird die Zeit gespeichert, zu welcher das letzte Mal die Daten innerhalb des Inodes geändert worden sind.

      Oh, das ist mir auch neu gewesen. Interessant.

      Freundliche Grüße,
      Christian Kruse

  2. problematische Seite

    Hello,

    ctime == mtime ? kann gar nicht sein. Is Bug?

    PHPv5.3

    Wie ist denn das Device gemounted?
    vielleicht mit no-atime?
    Das wäre der übliche Standard.

    Deshalb muss man Session-Lesezugriffe in PHP immer mindestens mit einem Dummy-Schreibvorgang bestücken, wenn man nicht will, dass die Session mittendrin stirbt.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. problematische Seite

      Hallo TS,

      ctime == mtime ? kann gar nicht sein.

      Klar kann das sein.

      Is Bug?

      Unwahrscheinlich. Ist nur ein Wrapper um den System Call. Vermutlich hast du eher etwas übersehen.

      Wie ist denn das Device gemounted?
      vielleicht mit no-atime?
      Das wäre der übliche Standard.

      noatime ist access time, nicht modification (mtime) oder creation time (ctime). ctime und mtime unterscheiden sich auch bei Dateisystemen, die mit noatime gemountet wurden.

      Freundliche Grüße,
      Christian Kruse

      1. problematische Seite

        Hello,

        Hallo TS,

        ctime == mtime ? kann gar nicht sein.

        Klar kann das sein.

        Is Bug?

        Unwahrscheinlich. Ist nur ein Wrapper um den System Call. Vermutlich hast du eher etwas übersehen.

        Wie ist denn das Device gemounted?
        vielleicht mit no-atime?
        Das wäre der übliche Standard.

        noatime ist access time, nicht modification (mtime) oder creation time (ctime). ctime und mtime unterscheiden sich auch bei Dateisystemen, die mit noatime gemountet wurden.

        Aber sie können auch gleich sein.

        Und anstelle von atime wird dann auch ctime angezeigt.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. problematische Seite

          Hallo TS,

          noatime ist access time, nicht modification (mtime) oder creation time (ctime). ctime und mtime unterscheiden sich auch bei Dateisystemen, die mit noatime gemountet wurden.

          Aber sie können auch gleich sein.

          Und anstelle von atime wird dann auch ctime angezeigt.

          Ja. Schrieb ich ein paar Zeilen weiter oben ja auch:

          ctime == mtime ? kann gar nicht sein.

          Klar kann das sein.

          😀

          Freundliche Grüße,
          Christian Kruse

          1. problematische Seite

            Hello,

            Hallo TS,

            noatime ist access time, nicht modification (mtime) oder creation time (ctime). ctime und mtime unterscheiden sich auch bei Dateisystemen, die mit noatime gemountet wurden.

            Aber sie können auch gleich sein.

            Und anstelle von atime wird dann auch ctime angezeigt.

            Ja. Schrieb ich ein paar Zeilen weiter oben ja auch:

            ctime == mtime ? kann gar nicht sein.

            Klar kann das sein.

            😀

            Klar. Habe ich auch gelesen.
            Ich lese immer, was Du schreibst ;-) ,

            Moin
            Tom aus Husum

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
    2. problematische Seite

      Wie ist denn das Device gemounted? vielleicht mit no-atime? Das wäre der übliche Standard.

      Jein.

      Tatsächlich ist seit Kernel 2.6.30 realatime "Standard".

      Das genannte Changelog ist nicht (mehr) verfügbar, aber im (sehr) vertrauenswürdigen Krenn-Wiki steht das auch so.

      An anderer Stelle habe ich gefunden, dass die access-Time mit realatime auch nur noch einmal am Tag (86400 s) gesetzt wird.

    3. problematische Seite

      Hm. Standard?

      Wenn man beim Mounten nur "defaults" als Option übergibt, dann sagt man 5 fstab dazu:

      defaults use default options: rw, suid, dev, exec, auto, nouser, and async.

      Ich würde nur das als die "Standards" ansehen. Der Rest ergibt sich dann aus den Einstellungen für den Dateisystemtreiber im Kernel, wie zuvor beschrieben.

      1. problematische Seite

        Hello,

        damit meinte ich auch nichg OOTB, sondern die üblichen Einstellungen bei den meisten Providern.

        Glück Auf
        Tom vom Berg

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. problematische Seite

          die üblichen Einstellungen bei den meisten Providern.

          Aha.

          1. problematische Seite

            Erst mal: Auf Grund veralteter Informationen auf asbach-alten Webseiten hab ich auch lange gedacht, man sollte aus Performance-Gründen noatime setzen. Das ist aber falsch.

            Ich zeig Dir mal, wie realatime wirkt:

            user@host:~$ LANG=c stat .profile
              File: .profile
              Size: 1124      	Blocks: 24         IO Block: 4096   regular file
            Device: 34h/52d	Inode: 28705471    Links: 1
            Access: (0644/-rw-r--r--)  Uid: ( 1000/  fastix)   Gid: ( 1000/  fastix)
            Access: 2019-12-21 14:08:38.099852967 +0100
            Modify: 2019-05-17 13:36:14.804068799 +0200
            Change: 2019-10-20 18:49:08.324084199 +0200
             Birth: -
            

            Heute ist der 22.12.2019. Den Rechner hab ich kurz vor 11:== angeschaltet und mich angemeldet. Wenn also atime wirken wirken würde, müsste heute gegen 11:00 ein Zugriff auf die Datei .profile registriert worden sein, denn in /etc/fstab steht als Mount-Option nur:

            errors=remount-ro
            

            Da aber seit Kernel 2.6.30 standardmäßig (man müsste ihn patchen und neu kompilieren oder aber mindestens Optionen beim Systemstart setzen um das anders zu machen) realatime verwendet wird steht als Access-Time "was von gestern" drin.

            Wieso sollte also "bei den meisten Providern" die "übliche Einstellung" noatime gewählt werden? Das spräche dafür, dass die "meisten Provider" sehr viel weniger über den Linux-Kernel wissen als ich und also in langen Winternächten nur mit einer Extra-Schicht Sonnencreme ins Bett gehen.

            Tun sie aber (hoffentlich) nicht.

            Zu wissen, ob die Access-Time jünger als die Modify- oder Change-Time ist, ist übrigens für die eine oder andere Anwendung auch wichtig. Das klassische Beispiel hierfür ist der Mailer mutt, der anhand der Zeiten entscheidet, ob ein Mail schon mal gelesen wurde oder nicht. Sowas kann auch für andere Programme wichtig sein.

            1. problematische Seite

              Hello,

              ja, Du hast Recht.
              Anders herum wird ein Schuh draus.

              Linux

              Wenn man keine der Mountoptionen zum Zugriffslogging angibt, wird das Kerneldefault benutzt, was entweder realatime oder strictatime ist.

              Wenn man das Logging wünscht, muss man mit atime mounten, was aber nicht die Regel ist.

              Windows

              Wie sind da die Möglichkeiten bei Windows?

              Glück Auf
              Tom vom Berg

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
              1. problematische Seite

                Wie sind da die Möglichkeiten bei Windows?

                Da ist es genua umgekehrt wie bei Unix. Bei Windows steht das c in ctime für create und atime ist synchron mit mtime.

                MFG

                1. problematische Seite

                  Hallo,

                  Da ist es genua umgekehrt wie bei Unix. Bei Windows steht das c in ctime für create und atime ist synchron mit mtime.

                  dafür passieren aber beim Kopieren mitunter lustige Dinge.

                  Beim Kopieren innerhalb des Filesystems bekommt nämlich die Kopie eine neue (aktuelle) ctime und atime, die mtime wird aber von der Originaldatei kopiert. So bekommt man Dateien, die (den Timestamps nach) schon modifiziert wurden, bevor sie überhaupt existiert haben.

                  Anders beim Kopieren über Verbindungen, bei denen Windows keinen Zugriff auf die Original-Timestamps hat (z.B. beim HTTP-Download). Dann bekommen beim Erzeugen der Kopie alle Timestamps (ctime, mtime, atime) den Timestamp von JETZT.

                  So long,
                   Martin

                  --
                  Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
              2. problematische Seite

                ja, Du hast Recht.
                Anders herum wird ein Schuh draus.

                Der Wortwitz ist göttlich.

                PS: Dieser Beitrag ist unproduktiv und schadet dem Geist des Forums.

              3. problematische Seite

                Wie sind da die Möglichkeiten bei Windows?

  3. problematische Seite

    Hello,

    ctime == mtime ? kann gar nicht sein. Is Bug?

    PHPv5.3

    Hast Du auch clearstatcache() benutzt?

    Außerdem sollte man besser die handlebasierte Funktion fstat() benutzen. Ma kann da einfacher den TOCTTOU-Gap vermeiden (flock()).

    stat() ist eigentlich nur noch für atime() interessant.

    Das ist aber eine Macke von PHP, bzw. C, weil die normale fopen()-Funktion das Assignen des Handles und dessen Benutzung nicht getrennt zur Verfügung stellt. Mit Pascal, wird dies getrennt bereitgestellt, genauso wie in den Assembler-APIs.

    Glück Auf
    Tom vom Berg

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
  4. problematische Seite

    The "inode change timestamp" (the "-C" filetest) may really be the "creation timestamp" (which it is not in Unix).

    Aha da hammers doch. Frage geklärt. MFG

    1. problematische Seite

      Hallo pl,

      The "inode change timestamp" (the "-C" filetest) may really be the "creation timestamp" (which it is not in Unix).

      Aha da hammers doch. Frage geklärt. MFG

      Ach, wie hast du denn das herausgefunden?

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. problematische Seite

        The "inode change timestamp" (the "-C" filetest) may really be the "creation timestamp" (which it is not in Unix).

        Aha da hammers doch. Frage geklärt. MFG

        Ach, wie hast du denn das herausgefunden?

        Das ist nicht die Frage. Vielmehr ist die Frage, wie man seine Anwendungen plattformunabhängig macht. Und zwar so daß sie in der Entwicklungsumgebung wie im Produktiveinsatz gleichermaßen funktionieren.

        MFG

        1. problematische Seite

          Hallo pl,

          The "inode change timestamp" (the "-C" filetest) may really be the "creation timestamp" (which it is not in Unix).

          Aha da hammers doch. Frage geklärt. MFG

          Ach, wie hast du denn das herausgefunden?

          Das ist nicht die Frage. Vielmehr ist die Frage, wie man seine Anwendungen plattformunabhängig macht. Und zwar so daß sie in der Entwicklungsumgebung wie im Produktiveinsatz gleichermaßen funktionieren.

          Du wolltest doch immer wissen, was Arroganz bedeutet. Mit diesem Beitrag hast du ein sehr gutes Beispiel gebracht. Du bekommst hier Fragen beantwortet und tust dann so, als ob du die Antwort selbst erarbeitet hättest, natürlich nur mithilfe deines überragenden Geistes und deiner Berufs- und Programmiererfahrung, die die aller anderen hier weit in den Schatten stellt. Das ist nicht nur arrogant, das ist auch äußerst schäbig und widerlich.

          Deine Selbstüberschätzung beginnt übrigens schon damit, einen Bug in einer Software zu vermuten, die millionenfach läuft, statt dich selbst zu fragen, ob du nicht vielleicht einem Irrtum aufgesessen bist.

          Bis demnächst
          Matthias

          --
          Du kannst das Projekt SELFHTML unterstützen,
          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
          1. problematische Seite

            Hallo

            Bei einem Problem nimmt man zunächst immer etwas an. Das ist eine übliche Herangehensweise. So hatte ich eben einen Bug angenommen und dabei völlig außer acht gelassen, daß meine Anwendungen auf verschiedenen Plattformen laufen. Trotzdem war meine Annahme absolut legitim und hat mit Selbstüberschätzung überhaupt nichts zu tun.

            Im Übrigen nutzen Perl wie PHP dieselben C-Libraries.

            PS: Ich kämpfe seit Jahren darum nach 2 Schlaganfällen mit nicht gerade trivialen Folgen zurück ins Leben zu kommen. Erzähle mir also nichts über Selbsteinschätzung!

            1. problematische Seite

              Hallo pl,

              PS: Ich kämpfe seit Jahren darum nach 2 Schlaganfällen mit nicht gerade trivialen Folgen zurück ins Leben zu kommen.

              Dafür hast du auch meinen tiefen Respekt, Achtung und Anerkennung. Das hat aber nichts mit deinem Verhalten hier zu tun.

              Bis demnächst
              Matthias

              --
              Du kannst das Projekt SELFHTML unterstützen,
              indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.