Lua, conky, otvaranie suboru

Sekcia: Programovanie 08.02 | 13:08
Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

Zdravim.

Hrajem sa s programovanim v lua a riesim jednu dilemu. Ako pracovat so suborom. Program sa spusta pri zapnuti pc a vypina s vypnutim pc. Zo suboru sa cita kazdu sekundu jedna hodnota a subor sa otvara iba na citanie.

No a teraz ta dilema. Otvorit ten subor a mat ho cely cas otvoreny a iba z neho citat alebo ho otvorit kazdu sekundu, precitat a zatvorit.

Ide o to ze v prvom pripade pri chybe(pade systemu/programu) mozem poskodit suborovy system a v druhom pripade mozem sposobit napriklad pri SSD rychle opotrebovanie buniek ked bude system stale zapisovat cas pristupu.

Jedna sa o subor /sys/class/net/wlp3s0/operstate a jeden subor v /home ktori je urceny iba na tuto funkciu uchovania jednej hodnoty. Ako toto riesia skutocny programatori?

    • RE: Lua, conky, otvaranie suboru 08.02 | 13:41
      Avatar WlaSaTy   Návštevník

      Tvoja dilema nie je opodstatnená. Totižto /sys je obvykle prípojný bod virtuálneho súborového systému typu sysfs, a tak opotrebenie SSD kvôli atime v tmoto prípade nebude. Teda, nepredpokladám že by si /sys implementoval inak. Každopádne si to skontroluj vo výstupe z príkazu mount.

      • RE: Lua, conky, otvaranie suboru 08.02 | 14:01
        Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

        Hej pri tom /sys som pocital ze by to mohlo byt osetrene ale ako som pisal tiez mam dalsi v /home. Tam by to mohlo mat aky dopad?

        • RE: Lua, conky, otvaranie suboru 08.02 | 14:13
          Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

          Pozeral som teraz do fstab a na SSD mam parameter noatime cize tam by problem asi tiez nemal byt. /sys je ako si pisal sysfs. Ale aj tak by ma v kratkosti zaujimalo ako to riesia programatori co sa tym zivia. Podla coho sa rozhoduju. Taketo info nebyva v programatorskych manualoch/cviceniach.

          • RE: Lua, conky, otvaranie suboru 08.02 | 14:25
            Avatar WlaSaTy   Návštevník

            Pokiaľ je tá hodnota nahraditeľná (obsahuje napr hodnotu z minula ku ktorej porovnávaš aktuálnu hodnotu), tak to daj do nejakého tmpfs. Napr do /dev/shm/.

            Inak nepredpokladám že by boli informácie o integrovaní v začiatočníckych programátorských príručkách. Pýtaš sa totižto na veci návrhu systému ktorý má vydržať na read-only diskoch. To je obvykle advanced level návrhu firmware pre jednoúčelové krabičky. Ale odkedy je trh zaplavený klonmi RaspberryPI, tak je takých návrhov plný internet. Komu už odišlo niekoľko SD kariet v RPI, ten vie prečo.

            • RE: Lua, conky, otvaranie suboru 08.02 | 14:43
              Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

              Ok, vdaka.

              • RE: Lua, conky, otvaranie suboru 08.02 | 15:13
                Avatar WlaSaTy   Návštevník

                A ak by to bol reálny SSD, tak by som to neriešil. Tie majú dostatočnú životnosť. Dokonca ani eMMC a podobné flash pamäte by som z rovnakého dôvodu neriešil (viď Android patlafóny). Riešil by som len ak by permanentné pam.médium bolo na niečom vrcholne nevhodnom na periodické zápisy ako SD karte alebo USB lízatku. Ale to je môj súkromný názor, tebe no nenútim.

                Pre teba je to len zmena priečinku ktorá ti eliminuje možnú chybu.

                • RE: Lua, conky, otvaranie suboru 08.02 | 15:49
                  Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

                  Ok, ja som sa medzitym zahral s ramdiskom. Vytvoril som si 16MB do /tmp/ramdisk a tam som presunul ten subor z /home. Zasa som si vyskusal nieco nove.

                  • RE: Lua, conky, otvaranie suboru 08.02 | 18:00
                    Avatar WlaSaTy   Návštevník

                    Ak sa chceš pohrať, tak si skús ešte zo srandy komprimované blokované zariadenie zram, len ho treba aj sformátovať.

                  • RE: Lua, conky, otvaranie suboru 08.02 | 19:03
                    Avatar obluda   Návštevník

                    Preco prave do suboru musis zapisat tu hodnotu? Nemozes ju drzat v pamati? A zapisat na disk iba pri vypnuti programu. Resp. o co sa snazis? Mozno je riesenie omnoho jednoduchsie.

                    • RE: Lua, conky, otvaranie suboru 08.02 | 19:54
                      Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

                      Ta hodnota je vystup bash skriptu ktori vyuzivam pri starte ntb na nastavenie gamma a kedze mam v ntb 2 GK tak pri starte detekujem ktora je aktivna. Vystup dam do suboru a odtial si to citalo conky ktore mi zobrazovalo aka GK je aktivna a podla toho zobrazoval aj teplotu. No a conky sa aktivuje kazdu sekundu a preto sa cita ten subor kazdu sekundu.

                      Mohol som tu GK nechat kontrolovat aj v conky ale zdalo sa mi menej narocne precitat jeden subor ako nechat bezat kazdu sekundu skript ktori by to nacital.

                      Ale ako pisem niesom programator cize islo by to urcite spavit inak/lepsie.

        • RE: Lua, conky, otvaranie suboru 08.02 | 19:21
          Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

          Ten súbor v /home sa asi nemení, ten ti stačí načítať raz, či?

          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: Lua, conky, otvaranie suboru 08.02 | 19:57
            Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

            Kym to bolo v rezii conky tak sa to muselo citat kazdu sekundu. Teraz ked to prepisujem do lua tak by to islo nacitat mimo hlavneho tela programu raz a potom to uz len nacitat z premennej. Len ma napadlo ako sa to bezne robi ked niekto potrebuje casto citat dajaky subor.

            • RE: Lua, conky, otvaranie suboru 08.02 | 20:01
              Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

              Este doplnim ze ta grafika sa nacita len pri starte pretoze ked chcem zmenit grafiku musim sa odhlasit. Pouzivam prime ale detekcia toho netu v /sys/class/net/wlp3s0/operstate musim kontrolovat stale pretoze prepnut z wifi na lan sa da pocas behu systemu.

    • RE: Lua, conky, otvaranie suboru 11.02 | 15:11
      Avatar Dušan_Kreheľ Debian  Používateľ

      Normálne napíš deamon aplikáciu (nepouži cron), ktorá bude každú sekundu zistovať a zobrazovať stav. Spúštať sa bude pri prihlásení do grafickéo sedenia (vid nastavenia svojho grafického prostredia). A pri odlasovaní sa posiela programom sinal SIGTERM alebo SIGINT alebo iný (radšej si naisto zisti alebo over aký), keď by si v programe chcel ešte na to reaovať. A program pri spústení načíta nový stav, pri ukončení uloží stav a v pripade neznáma zistí si stav aktuálny.

      A k ukladaniu hodnoty. Ukladaj iba zmenu (deamon aplikácia nebude mať problém si pamätať i predchádzajúcu zmenu).

      A ešte dá sa riešiť, že vytvoríš prepisovací súbor. Tj. manuálová stránka fopen(3) mód otvorenia w+, alebo dobre napíšeš program a daš mu setuid príznak pre root.

      + hore v komentároch riešenie/-ia

      Tak by som to riešil ja.

      • RE: Lua, conky, otvaranie suboru 11.02 | 15:28
        Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

        Vdaka. Pri ukoncovani nepotrebujem riesit ukladanie hodnoty, cize tam je to v pohode. Ostatne pozriem.

      • RE: Lua, conky, otvaranie suboru 11.02 | 15:33
        Avatar Dušan_Kreheľ Debian  Používateľ

        Mód otvorenia w+ vyžaduje (alebo by mal) práva routa.

      • RE: Lua, conky, otvaranie suboru 12.02 | 00:16
        Avatar samalama.   Návštevník

        to je neskutocne, co ty tu bliakas...

    • RE: Lua, conky, otvaranie suboru 11.02 | 16:59
      Avatar tux456   Návštevník

      Opakovanemu dotazovaniu sa na zmenu je dobre sa vyhnut minimalne vo vecsich projektoch. Usetri sa tym cas procesora a pripadne i dalsi hardware napr. v pripade ssd diskov. Da sa to cez rozne systemy notifikacii (udalosti/signalov) ktore umoznia pozastavit vykonavanie vlakna do doby kym nenastane udalost na ktoru program caka. Na druhej strane taketo riesenie moze byt zlozitejsie. Napr. suborovy system sa da monitorovat na linuxe pomocou sluzby jadra inotify ktora umoznuje zaregistrovat udalosti typu otvorenie, zapis, citanie, ... suborov a priecinkov. Bohuzial na sysfs to zatial moc nefunguje kedze je to virtualny filesystem. Ako to funguje sa da vyskusat aj v prikazovom riadku pomocou utility inotifywait (z balika inotify-tools na debian/ubuntu based distribuciach):

      inotifywait -m -e modify,moved_to ~/ # subory mozu byt zmenene zapisom do nich ale aj prepisanim samotneho suboru novym
      Sietove zariadenia sa daju monitorovat napr. pomocou udalosti ktore generuje network-manager na svojom d-bus rozhrani. Na nizsej urovni sa da zrejme vyuzit sluzba jadra netlink (toto som teraz narychlo vygooglil). Ale ci je tento pristup pouzitelny pri programovani conky scriptov netusim.

      • RE: Lua, conky, otvaranie suboru 11.02 | 17:36
        Avatar qw11 ubuntu 16.04 64bit Asus X751LB  Používateľ

        inotify-tool je tiez riesenie ale kvoli conky by som nechcel doinstalovavat dalsie veci. Ale vdaka radam co tu boli som si nastudoval par veci a zistil som ze /dev/shm je pristupne aj beznemu uzivatelovi. Neviem preco som si myslel ze tam ma pristup iba root. Cize aj vytvaranie toho ramdisku je zbytocne.