User mappájába fájl létrehozás c++ban

Kezdőlap Fórumok Programozás User mappájába fájl létrehozás c++ban

10 bejegyzés megtekintése - 1-10 / 31
  • Szerző
    Bejegyzés
  • #2137226
    pointux
    Felhasználó

      „de mivel ez felhasználóként változik”
      Gondolom a „home”-ra gondolsz… man getenv(3).
      Ha valami „extra” helyről van szó, akkor egy adott helyen lévő konfigurációs file-ban kell tárolni…

      #2137227
      pointux
      Felhasználó

        „de mivel ez felhasználóként változik”
        Gondolom a „home”-ra gondolsz… man getenv(3).
        Ha valami „extra” helyről van szó, akkor egy adott helyen lévő konfigurációs file-ban kell tárolni…

        #2137228
        nanobit
        Felhasználó

          Köszi, összejött!
          A következő kérdésem inkább érdekes jellegű lenne.
          Az előbbiekben említett getenv visszatérési értékét egy char mutatóban tárolom. Ehhez hozzáfűzőm a szűkséges karakterláncot, ami az elérési út további része. Elrendezem a fájlműveleteket, lezárom. De nekem még szükségem van a elérési útra, mert a fájlműveletekben egy .sh fájlt hoztam létre, amit chmod +x paranccsal kellene futtathatóvá tenni. Ezt úgy oldanám meg, hogy egy következő változóhoz hozzáfűzném a „chmod +x ” láncot, aztán az elérési utat, majd a változót a system függvénybe rakva elérem a célom. Megmutatom a kódot, hogy nagyjából lássátok mier gondolok:

          char futtatas[40]=””;
            char *home;

              home = getenv(„HOME”);
              strcat(home,”/.kde/Autostart/valami.sh”);
              sfile=fopen(home,”w+”);
              fputs(szoveg,sfile);
              fclose(sfile);

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

          Nos. Miért van az, hogy csak akkor képes lefutni a system függvény, ha a futtatas változót az adott módon definiálom/deklarálom?

          #2137229
          nanobit
          Felhasználó

            Köszi, összejött!
            A következő kérdésem inkább érdekes jellegű lenne.
            Az előbbiekben említett getenv visszatérési értékét egy char mutatóban tárolom. Ehhez hozzáfűzőm a szűkséges karakterláncot, ami az elérési út további része. Elrendezem a fájlműveleteket, lezárom. De nekem még szükségem van a elérési útra, mert a fájlműveletekben egy .sh fájlt hoztam létre, amit chmod +x paranccsal kellene futtathatóvá tenni. Ezt úgy oldanám meg, hogy egy következő változóhoz hozzáfűzném a „chmod +x ” láncot, aztán az elérési utat, majd a változót a system függvénybe rakva elérem a célom. Megmutatom a kódot, hogy nagyjából lássátok mier gondolok:

            char futtatas[40]=””;
              char *home;

                home = getenv(„HOME”);
                strcat(home,”/.kde/Autostart/valami.sh”);
                sfile=fopen(home,”w+”);
                fputs(szoveg,sfile);
                fclose(sfile);

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

            Nos. Miért van az, hogy csak akkor képes lefutni a system függvény, ha a futtatas változót az adott módon definiálom/deklarálom?

            #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);

              #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);

                #2137232
                pointux
                Felhasználó

                  Mármint mire gondolsz? (Mikor nem? „char * futtatas” helyfoglalás nélkül, ahogy gabaman írta?)
                  Egyébként szükségtelen a system, lásd.: chmod(2), chmod(3p).

                  #2137233
                  pointux
                  Felhasználó

                    Mármint mire gondolsz? (Mikor nem? „char * futtatas” helyfoglalás nélkül, ahogy gabaman írta?)
                    Egyébként szükségtelen a system, lásd.: chmod(2), chmod(3p).

                    #2137234
                    ELaci
                    Felhasználó

                      Szörnyű!
                      Nem akarok C-ben programozni amíg élek!

                      🙂

                      #2137235
                      ELaci
                      Felhasználó

                        Szörnyű!
                        Nem akarok C-ben programozni amíg élek!

                        🙂

                      10 bejegyzés megtekintése - 1-10 / 31
                      • Be kell jelentkezni a hozzászóláshoz.