abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:33 | Bezpečnostní upozornění

    Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána nová verze 1.25 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Nová verze

    Byla vydána beta verze Linux Mintu 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | IT novinky

    Provozovatel internetové encyklopedie Wikipedie prohrál v Británii soudní spor týkající se některých částí nového zákona o on-line bezpečnosti. Soud ale varoval britského regulátora Ofcom i odpovědné ministerstvo před zaváděním přílišných omezení. Legislativa zpřísňuje požadavky na on-line platformy, ale zároveň čelí kritice za možné omezování svobody slova. Společnost Wikimedia Foundation, která je zodpovědná za fungování

    … více »
    Ladislav Hagara | Komentářů: 1
    včera 12:55 | Nová verze

    Byla vydána verze 2.0.0 nástroje pro synchronizaci dat mezi vícero počítači bez centrálního serveru Syncthing (Wikipedie). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    včera 12:33 | IT novinky

    Americký prezident Donald Trump se v pondělí osobně setkal s generálním ředitelem firmy na výrobu čipů Intel Lip-Bu Tanem. Šéfa podniku označil za úspěšného, informují agentury. Ještě před týdnem ho přitom ostře kritizoval a požadoval jeho okamžitý odchod. Akcie Intelu v reakci na schůzku po oficiálním uzavření trhu zpevnily asi o tři procenta.

    Ladislav Hagara | Komentářů: 9
    11.8. 04:55 | Nová verze

    Byl vydán Debian GNU/Hurd 2025. Jedná se o port Debianu s jádrem Hurd místo obvyklého Linuxu.

    Ladislav Hagara | Komentářů: 6
    11.8. 02:44 | Komunita

    V sobotu 9. srpna uplynulo přesně 20 let od oznámení projektu openSUSE na konferenci LinuxWorld v San Franciscu. Pokuď máte archivní nebo nějakým způsobem zajímavé fotky s openSUSE, můžete se o ně s námi podělit.

    lkocman | Komentářů: 6
    9.8. 21:11 | Nová verze

    Byl vydán Debian 13 s kódovým názvem Trixie. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 8
    9.8. 15:55 | Zajímavý software

    WLED je open-source firmware pro ESP8266/ESP32, který umožňuje Wi-Fi ovládání adresovatelných LED pásků se stovkami efektů, synchronizací, audioreaktivním módem a Home-Assistant integrací. Je založen na Arduino frameworku.

    Indiánský lotr | Komentářů: 0
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (48%)
     (20%)
     (4%)
     (5%)
     (3%)
     (1%)
     (1%)
     (18%)
    Celkem 348 hlasů
     Komentářů: 23, poslední 4.8. 13:01
    Rozcestník

    Dotaz: Escapované znaky jako argumenty v shellu a C

    15.9.2005 22:37 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Escapované znaky jako argumenty v shellu a C
    Přečteno: 252×
    Existuje nějaká funkce v C, která dokáže nahradit řetězec "\n" znakem konec řádku '\n' (samozřejmě i ostatní backslashed sekvence, jako '\t', ...)? Problém je, že parametry v shellu se předávají tímto způsobem - pokud chci konec řádku '\n', dostanu dva znaky '\' a 'n'.

    Tj. mám program foo -o "x=%x\ny=%y" a textové části se tisknou fputs(f,stdout);. Výstupem je tedy x=3\ny=4.
    When your hammer is C++, everything begins to look like a thumb.

    Odpovědi

    15.9.2005 22:47 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Takových funkcí je spousta... Ale ve standardní knihovně není žádná, pokud se ptáš na tohle.
    15.9.2005 22:51 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Vzhledem k tomu, že to má být do pingu, tak by se mi hodilo něco pod BSD licencí, jinak si to budu muset napsat sám, nebo tuhle featurku oželet (lsof to taky neumí, jak jsem zjistil).
    When your hammer is C++, everything begins to look like a thumb.
    15.9.2005 23:17 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Dávám tuto implementaci do public domain. Je asi bugovitá, protože jsem ji právě napsal z hlavy. Neumí \xAB a \012, ale to snad tak nevadí...
    #include <stdio.h>
    #include <string.h>
    
    int
    main(int argc,
         char *argv[])
    {
        while (*(++argv)) {
            const char *s = *argv, *p;
            char c;
    
            while ((p = strchr(s, '\\'))) {
                printf("%.*s", p - s, s);
                s = p+1;
                if (!(c = *s)) {
                    fprintf(stderr, "String ends with a backslash\n");
                    break;
                }
                switch (c) {
                    case '\\': c = '\\'; break;
                    case '0': c = '\0'; break;
                    case 'a': c = '\a'; break;
                    case 'b': c = '\b'; break;
                    case 'e': c = '\x1b'; break;
                    case 'f': c = '\f'; break;
                    case 'n': c = '\n'; break;
                    case 'r': c = '\r'; break;
                    case 't': c = '\t'; break;
                    case 'v': c = '\v'; break;
    
                    default:
                    fprintf(stderr, "Unknown escape `%c'\n", c);
                    break;
                }
                putchar(c);
                s++;
            }
            puts(s);
        }
    
        return 0;
    }
    
    Lepší by bylo něco, co převede string na string -- což v principu lze i printf() funkcemi, ale je to otrava.
    15.9.2005 23:37 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Vzhledem k uvažovanému použití je ale lepší dělat strcspn(string, "%\\") a expandovat obojí zároveň, jen se musíš rozhodnout, jak interpretovat dva různé escape znaky vedle sebe...
    15.9.2005 22:47 #Tom
    Rozbalit Rozbalit vše Nejsem si jist, jestli jsem to pochopil...
    Napadá mě akorát tohle:
    #include <stdio.h>
    int main() {
      char buffer[128], *p;
      sprintf(buffer, "Ahoj\n");
      for (p = buffer; *p != '\0'; p++)
        printf("%02x ", *p);
      printf("\n");
      return 0;
    }
    
    Vypíše se toto:
    41 68 6f 6a 0a
    
    15.9.2005 22:56 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Nejsem si jist, jestli jsem to pochopil...
    Jde o to, že ze shellu dostanu "Ahoj\\n", tj řetězec o délce 6 se znaky 'A','h','o','j','\\','n'. No a já potřebuji funkci, která nahradí dvojznak "\\n" za konec řádku '\n' - tj, výsledný řetězec bude mít 5znaků (Ahoj+konec řádku).
    When your hammer is C++, everything begins to look like a thumb.
    16.9.2005 00:20 #Tom
    Rozbalit Rozbalit vše Re: Nejsem si jist, jestli jsem to pochopil...
    Tak jsem trošku pozapomněl, co se dělá už při překladu a co za běhu. Tohle už je lepší:
    #include <stdio.h>
    
    int tab[] = {
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      /* \% */'\%', -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/* \0 */'\0',-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,'\\',-1,-1,-1,-1,
      /* \a */'\a', /* \b */'\b', -1,-1,/* \e */'\e', /* \f */'\f',
      -1,-1,-1,-1,-1,-1,-1,/* \n */'\n', -1,-1,-1,/* \r */'\r',-1,
      /* \t */'\t', -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
      -1,-1,-1,-1,-1,-1,-1,-1,-1 };
    
    char *zpracuj_lomitka(char *str) {
      unsigned char *a, *b;
      if (str == NULL) return NULL;
      for (a = b = str; *a != '\0'; a++, b++)
        if (*a == '\\' && tab[a[1]] >= 0)
          *b = tab[*++a];
        else
          *b = *a;
      *b = '\0';
      return str;
    }
    
    int main() {
      char *p, str[] = "Ahoj!\\a\\b\\e\\f\\n\\r\\t\%\\\\\\0";
      for (p = str; *p != '\0'; p++)
        printf("%02x ", *p);
      printf("\n");
      zpracuj_lomitka(str);
      for (p = str; *p != '\0'; p++)
        printf("%02x ", *p);
      printf("\n");
      return 0;
    }
    
    Přepisuje se přímo zdrojový řetězec. Možná to proto hodí segfault (což udělá určitě, když dám místo str[] jen *str), ale ta funkce by měla být jinak v pořádku.
    15.9.2005 22:51 0
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Resim to prostym pouzitim sscanf.
    15.9.2005 23:02 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Escapované znaky jako argumenty v shellu a C
    Mohl bys to, prosím, trochu rozvést? Nějak nevím, jak by mi sscanf mohl pomoci.
    When your hammer is C++, everything begins to look like a thumb.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.