gabaman

Hozzászólások

10 bejegyzés megtekintése - 451-460 / 2,173
  • Szerző
    Bejegyzés
  • Hozzászólás: User mappájába fájl létrehozás c++ban #2137255
    gabaman
    Felhasználó
      nanobit wrote:
      Akkor valaki el tudná mondani, hogy hogyan lenne helyesen? Lehetőleg olyasvalaki aki nem hurrog le, mert kezdő vagyok…

      Az az igazság, hogy ha nem érted mit írtam, most nem is fogod. A C nyelv memória kezelését hetek, de inkább hónapok alatt lehet megtanulni.

      Hozzászólás: User mappájába fájl létrehozás c++ban #2137250
      gabaman
      Felhasználó
        nanobit wrote:
        még csak néhány napja próbálgatom a c++-t

        Rossz hírem van. Nem C++ nyelven próbálkozol. Ez van.

        Így lenne helyesen (C++):

        Code:
          std::string fajlnev;
          char *home;

            home = getenv(„HOME”);
            if (home == NULL)
          throw MyException(„A $HOME környezeti változó tartalma ismeretlen!”);
            fajlnev = home;
            fajlnev +=”/.kde/Autostart/valami.sh”;
            try {
        std::ofstream sfile (fajlnev);
            }
            catch (…)
          throw MyException(„Hiba a fájl megnyitása közben”);
            sfile << szoveg;
            sfile.close();

            chmod(fajlnev.c_str(), S_IXUSR);

        Hozzászólás: User mappájába fájl létrehozás c++ban #2137251
        gabaman
        Felhasználó
          nanobit wrote:
          még csak néhány napja próbálgatom a c++-t

          Rossz hírem van. Nem C++ nyelven próbálkozol. Ez van.

          Így lenne helyesen (C++):

          Code:
            std::string fajlnev;
            char *home;

              home = getenv(„HOME”);
              if (home == NULL)
            throw MyException(„A $HOME környezeti változó tartalma ismeretlen!”);
              fajlnev = home;
              fajlnev +=”/.kde/Autostart/valami.sh”;
              try {
          std::ofstream sfile (fajlnev);
              }
              catch (…)
            throw MyException(„Hiba a fájl megnyitása közben”);
              sfile << szoveg;
              sfile.close();

              chmod(fajlnev.c_str(), S_IXUSR);

          Hozzászólás: User mappájába fájl létrehozás c++ban #2137244
          gabaman
          Felhasználó
            nanobit wrote:
            Gabaman!

            Jelen!

            nanobit wrote:
            Te most a char *home-ra gondolsz?

            Az egy váltzó. Az getenv() függvényre gondoltam, ez ad vissza fix méretű tömböt.

            nanobit wrote:
            Csak megjegyzem, hogy gond nélkül hozzáfűzte a futtatas változó tartalmához.

            Tehát a számítógép sem működhet, mert még senki sem látott elektronokat futkározni, vagy csak nem köszöntek vissza. Kérdezd meg Valgrind pajtást, jobban tudja mindenkinél mi jó és mi nem.

            nanobit wrote:
            A probléma ott kezdődik, hogy az első hozzáfűzéskor, mikor a chmod +x-et fűzöm hozzá a futtatas-hoz, ami mindaddig üres volt, bevág nekem az elejére 2 vagy 3 kérdőjelet.

            Lásd „inicializálatlan változó”.

            nanobit wrote:
            Ehhez még hozzájön a char mutatós home karaktertömb tartalma, ami hibátlanul hozzáfűződik, viszon a system nem tud mit kezdeni a paranccsal, mert a ???chmod +x nem futtatható…

            Hidd csak el, a szabadság sok nyűggel és felelőssggel jár. A C fordító nem jelzi a helytelen mutató használatból eredő hibákat.

            Hozzászólás: User mappájába fájl létrehozás c++ban #2137245
            gabaman
            Felhasználó
              nanobit wrote:
              Gabaman!

              Jelen!

              nanobit wrote:
              Te most a char *home-ra gondolsz?

              Az egy váltzó. Az getenv() függvényre gondoltam, ez ad vissza fix méretű tömböt.

              nanobit wrote:
              Csak megjegyzem, hogy gond nélkül hozzáfűzte a futtatas változó tartalmához.

              Tehát a számítógép sem működhet, mert még senki sem látott elektronokat futkározni, vagy csak nem köszöntek vissza. Kérdezd meg Valgrind pajtást, jobban tudja mindenkinél mi jó és mi nem.

              nanobit wrote:
              A probléma ott kezdődik, hogy az első hozzáfűzéskor, mikor a chmod +x-et fűzöm hozzá a futtatas-hoz, ami mindaddig üres volt, bevág nekem az elejére 2 vagy 3 kérdőjelet.

              Lásd „inicializálatlan változó”.

              nanobit wrote:
              Ehhez még hozzájön a char mutatós home karaktertömb tartalma, ami hibátlanul hozzáfűződik, viszon a system nem tud mit kezdeni a paranccsal, mert a ???chmod +x nem futtatható…

              Hidd csak el, a szabadság sok nyűggel és felelőssggel jár. A C fordító nem jelzi a helytelen mutató használatból eredő hibákat.

              Hozzászólás: User mappájába fájl létrehozás c++ban #2137230
              gabaman
              Felhasználó
                nanobit wrote:
                Sziasztok! Sajnos csak nem régóta tudok foglalkozni a C++ rejtelmeivel.

                nanobit wrote:
                  char *home;

                    home = getenv(„HOME”);
                    strcat(home,”/.kde/Autostart/valami.sh”);

                No igen, ilyen szőrnyűségek akkor keletkeznek, amikor valaki C++ stílusban akar C nyelven programozni. A „char*” visszatérési típus nem sztringet ad vissza (mint a C++ std::string típusa), hanem karakterlánccal feltöltött fix méretű memóriatömböt. Így nem fűzhetsz hozzá semmit, mert a lefoglalt memória utáni területre fogsz írni. Mellesleg a 40 byte hosszú tömb nem bizos, hogy elég. Ha meg nincs ellenőrzés a getenv() után, akkor lehet hogy a gyökér könyvtárba fogsz írni…

                Code:
                  char futtatas[100]=””;
                  char fajlnev[100]=””;
                  char *home;

                    home = getenv(„HOME”);
                    if (home == NULL) {
                  printf(„A $HOME környezeti változó tartalma ismeretlen!”);
                  return FALSE;
                    }
                    strcat(fajlnev,home);
                    strcat(fajlnev,”/.kde/Autostart/valami.sh”);
                    sfile=fopen(fajlnev,”w+”);
                    fputs(szoveg,sfile);
                    fclose(sfile);

                    strcat(futtatas,”chmod +x „);
                    strcat(futtatas,fajlnev);
                    system(futtatas);

                Hozzászólás: User mappájába fájl létrehozás c++ban #2137231
                gabaman
                Felhasználó
                  nanobit wrote:
                  Sziasztok! Sajnos csak nem régóta tudok foglalkozni a C++ rejtelmeivel.

                  nanobit wrote:
                    char *home;

                      home = getenv(„HOME”);
                      strcat(home,”/.kde/Autostart/valami.sh”);

                  No igen, ilyen szőrnyűségek akkor keletkeznek, amikor valaki C++ stílusban akar C nyelven programozni. A „char*” visszatérési típus nem sztringet ad vissza (mint a C++ std::string típusa), hanem karakterlánccal feltöltött fix méretű memóriatömböt. Így nem fűzhetsz hozzá semmit, mert a lefoglalt memória utáni területre fogsz írni. Mellesleg a 40 byte hosszú tömb nem bizos, hogy elég. Ha meg nincs ellenőrzés a getenv() után, akkor lehet hogy a gyökér könyvtárba fogsz írni…

                  Code:
                    char futtatas[100]=””;
                    char fajlnev[100]=””;
                    char *home;

                      home = getenv(„HOME”);
                      if (home == NULL) {
                    printf(„A $HOME környezeti változó tartalma ismeretlen!”);
                    return FALSE;
                      }
                      strcat(fajlnev,home);
                      strcat(fajlnev,”/.kde/Autostart/valami.sh”);
                      sfile=fopen(fajlnev,”w+”);
                      fputs(szoveg,sfile);
                      fclose(sfile);

                      strcat(futtatas,”chmod +x „);
                      strcat(futtatas,fajlnev);
                      system(futtatas);

                  Hozzászólás: SATA boot #2136750
                  gabaman
                  Felhasználó
                    tovis wrote:
                    Ami a már bootolódó/betolt kernelt illeti ott már sok mindent meg lehettenni, pl. van az scsidev ami papírforma szerint „makes permanent SCSILUN -> devicename connections” – jól hangzik nem?

                    „Tartósan létrehozza az SCSI LUN -> eszköznév hozzárendeléseket”. Szerintem jól hangzik, mert erre van szükséged.

                    tovis wrote:
                    No mindegy, egy szónak is száz a vége, biztos hogy valahogy meglehet oldani, de ami ilyen bonyolult az már nem lessz eléggé megbízható – szerintem.

                    Valószínűleg nem vetted észre, de több megoldást is írtam. A legegyszerűbb a bootCD + fstab címkék páros, így nem kell foglalkozni az SCSI dolgokkal.

                    Hozzászólás: SATA boot #2136751
                    gabaman
                    Felhasználó
                      tovis wrote:
                      Ami a már bootolódó/betolt kernelt illeti ott már sok mindent meg lehettenni, pl. van az scsidev ami papírforma szerint „makes permanent SCSILUN -> devicename connections” – jól hangzik nem?

                      „Tartósan létrehozza az SCSI LUN -> eszköznév hozzárendeléseket”. Szerintem jól hangzik, mert erre van szükséged.

                      tovis wrote:
                      No mindegy, egy szónak is száz a vége, biztos hogy valahogy meglehet oldani, de ami ilyen bonyolult az már nem lessz eléggé megbízható – szerintem.

                      Valószínűleg nem vetted észre, de több megoldást is írtam. A legegyszerűbb a bootCD + fstab címkék páros, így nem kell foglalkozni az SCSI dolgokkal.

                      Hozzászólás: SATA boot #2136746
                      gabaman
                      Felhasználó
                        tovis wrote:
                        Kitől kérem be az aktuális boot ID -t? – automatikus boot kell.

                        Csak tudod melyik vinyóra telepítetted az OS-t. Minden vinyónak van sorozatszáma, ami a /proc/scsi/scsi fájlban látszik. Ezt automatikusan meg lehet keresni.

                        tovis wrote:
                        Ki fogja végrehajtani az általad leírt parancsot és mikor?

                        Mivel a boot lemezen van, és /sbin/init a neve, ezért a kernel indítja, ahányszor bootolsz a CD-ről.

                        tovis wrote:
                        Ráadásul (lehet hogy nem említettem?) Debian netinst -el előfordult, hogy megcserélte a SCSI ID -t bootoláskor (van egy SCSI hdd és bvan egy SATA hdd a gépben). Ha leállítoma gépet (poweroff) és kisvágtatva újra indítom akkor megint visszaáll! – mi ez, wos? Ha ilyen előfordul akkor az fstab is borul – /home és a többishocked.gif
                        Egyébként nem tudom mit fog csinálni egy rendszer ha mondjuk /dev/sdb1 ként volt telepítve és /dev/sda1 -ként ébresztik?

                        Tehát minden bootolás alkalmával kiszámíthatatlan az SCSI vezérlőhöz rendelt azonostó (scsi0 vagy scsi1). Erre a megoldás a „LABEL” használata az fstab-ban (man fstab).Az e2label paranccsal megadod a partíció címkéjét (pl, root), majd a mount és a grub szépen megkeresi hol is van a partíció. Bár a régebbi Debianok nem támogatják, sajna. Ha van e2label valamelyik csomagban, akkor működni fog.

                        Persze ez nem oldja meg a bootolást, de ha van egy behúzott kernel, akkor már menni fog. Mellesleg USB flash-ről is lehet bootolni, ha a BIOS támogatja.

                        # e2label /dev/sda1 root

                        /etc/fstab (részlet):
                        LABEL=root / ext3 defaults 1 1

                      10 bejegyzés megtekintése - 451-460 / 2,173