[ICON] Datei-Statistik

  • Hallo zusammen,

    letzte Woche bin ich über das Linux-Kommando [font="Courier New"]stat[/font] gestolpert. Irgendwie hatte ich mich vertippt - und bin dann da hängengeblieben.

    Dann dachte ich mir, dass es ganz sinnvoll sein könnte, gezielt bestimmte von [font="Courier New"]stat[/font] gelieferte Daten abzufragen - dieses Mal aber nicht über die Frickler-Pipes ;) .

    Entstanden ist dann folgendes Programm:

    Ausgabe (die Formatierung der Ausgabe kommt hier jetzt nicht so rüber :fies: :

    Spoiler anzeigen


    Icon Version 9.5.1, June 5, 2013 (linux 32/64, Sep 5 2014)
    Image: list_1(0)
    Input: Datei: »/home/andreas/icon9_51/bin/coexp_fileattr“
    Input: Größe: 12364 Blöcke: 32 EA Block: 4096 Normale Datei
    Input: Gerät: 816h/2070d Inode: 22589277 Verknüpfungen: 1
    Input: Zugriff: (0775/-rwxrwxr-x) Uid: ( 1000/ andreas) Gid: ( 1000/ andreas)
    Input: Zugriff : 2017-09-03 22:21:16.479085893 +0200
    Input: Modifiziert: 2017-09-03 22:21:16.475085893 +0200
    Input: Geändert : 2017-09-03 22:21:16.475085893 +0200
    Input: Geburt : -

    Ausgabe über Variablen:
    /home/andreas/icon9_51/bin/coexp_fileattr
    12364
    32
    4096
    Normale Datei
    2070
    22589277
    1
    (0775/-rwxrwxr-x)
    ( 1000/ andreas)
    ( 1000/ andreas)
    2017-09-03 22:21:16.479085893 +0200
    2017-09-03 22:21:16.475085893 +0200
    2017-09-03 22:21:16.475085893 +0200
    -

    Setzen eines Arrays
    15 Elemente
    L[1]: /home/andreas/icon9_51/bin/coexp_fileattr
    L[2]: 12364
    L[3]: 32
    L[4]: 4096
    L[5]: Normale Datei
    L[6]: 2070
    L[7]: 22589277
    L[8]: 1
    L[9]: (0775/-rwxrwxr-x)
    L[10]: ( 1000/ andreas)
    L[11]: ( 1000/ andreas)
    L[12]: 2017-09-03 22:21:16.479085893 +0200
    L[13]: 2017-09-03 22:21:16.475085893 +0200
    L[14]: 2017-09-03 22:21:16.475085893 +0200
    L[15]: -

    Setzen über einen Record
    /home/andreas/icon9_51/bin/coexp_fileattr
    12364
    32
    4096
    Normale Datei
    2070
    22589277
    1
    (0775/-rwxrwxr-x)
    ( 1000/ andreas)
    ( 1000/ andreas)
    2017-09-03 22:21:16.479085893 +0200
    2017-09-03 22:21:16.475085893 +0200
    2017-09-03 22:21:16.475085893 +0200
    -
    fstats_.filename: /home/andreas/icon9_51/bin/coexp_fileattr
    fstats_.size: 12364
    fstats_.block: 32
    fstats_.eab: 4096
    fstats_.typ: Normale Datei
    fstats_.device: 2070
    fstats_.inodes: 22589277
    fstats_.links: 1
    fstats_.rights: (0775/-rwxrwxr-x)
    fstats_.uid: ( 1000/ andreas)
    fstats_.gid: ( 1000/ andreas)
    fstats_.access: 2017-09-03 22:21:16.479085893 +0200
    fstats_.modified: 2017-09-03 22:21:16.475085893 +0200
    fstats_.changed: 2017-09-03 22:21:16.475085893 +0200
    fstats_.birth: -

    Setzen über eine Tabelle
    fs["block"] = 32
    fs["filename"] = /home/andreas/icon9_51/bin/coexp_fileattr
    fs["links"] = 1
    fs["device"] = 2070
    fs["gid"] = ( 1000/ andreas)
    fs["eab"] = 4096
    fs["rights"] = (0775/-rwxrwxr-x)
    fs["typ"] = Normale Datei
    fs["change"] = 2017-09-03 22:21:16.475085893 +0200
    fs["uid"] = ( 1000/ andreas)
    fs["modification"] = 2017-09-03 22:21:16.475085893 +0200
    fs["access"] = 2017-09-03 22:21:16.479085893 +0200
    fs["inodes"] = 22589277
    fs["birth"] = -
    fs["size"] = 12364

    Verwendete Techniken:

    • Alternative Variablenzuweisungen,
    • die üblichen Zeichenkettenaufrufe (dieses Mal nur von Variablen - nicht von Funktionen),
    • die Datentypen Listen, und Tabellen
    • Co-Expressions (bis zum Erbrechen)
    • und mal wieder String-Scanning (auch reichlich eingesetzt)

    Code-Deutung:
    folgt ein anderes Mal...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (3. September 2017 um 22:42)

  • Hallo Tell,

    Zitat von "Tell" pid='298323' dateline='1504475013'


    Kann diese Sprache denn int stat(const char *pathname, struct stat *buf) nicht direkt aufrufen??


    Diese Sprache kann alles Mögliche aufrufen, sofern man entsprechenden Quellcode "inkludiert" oder vorcompilierte Dateien einbindet (Präprozessor-Kommando link) oder shared objects adressiert.
    Diese Sprache überzeugt aber auch dadurch, dass man nicht erst ein Dutzend anderer Dateien ansprechen muss, bevor man auch nur ein einziges Zeichen formatiert auf den Bildschirm bekommt... Davon habe ich mal Gebrauch gemacht und gezeigt, dass man sich beliebige Funktionen maßschneidern kann - und nicht auf fertige Sachen angewiesen ist.

    Meiner Meinung nach besteht Programmieren in mehr als Bibliothelken einzubinden und sich von einem bibliotheksgestützten / klassengestützten Funktionsaufruf / Methodenaufruf zum nächsten durchzuhangeln.

    Der in dem gezeigten Beispiel verwendete Aufruf lautet demnach (einfach)

    Code
    @filestat


    oder wie auch immer genannt. Ist ja frei wählbar. Das Ergebnis befindet sich in einem Satz von Variablen, in einer Liste = Array, in einer Struktur (wie Du es mit Deiner Frage andeutest) oder in einer Tabelle, die - einmal angelegt - sehr komfortabel abgefragt werden kann.

    Genaueres geht aber auch aus dem gezeigten Quellcode hervor, bei dem es mir in erster Linie um Co-Expressions und String-Scanning ging. Insbesondere Letzteres zeigt ein paar Features von Icon, die mit recht wenig Quellcode viel Funktionalität erzielen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (4. September 2017 um 09:52)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!