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 11:44 | Nová verze

    Dibuja je jednoduchý kreslící program inspirovaný programy Paintbrush pro macOS a Malování pro Windows. Vydána byla verze 0.26.0.

    Ladislav Hagara | Komentářů: 0
    včera 23:33 | Nová verze

    Byla vydána nová verze 9.13 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 21:44 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | Nová verze

    Byla vydána nová stabilní verze 3.22.0, tj. první z nové řady 3.22, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    30.5. 00:33 | IT novinky

    FEL ČVUT vyvinula robotickou stavebnici pro mladé programátory. Stavebnice Brian byla navržená speciálně pro potřeby populární Robosoutěže. Jde ale také o samostatný produkt, který si může koupit každý fanoušek robotiky a programování od 10 let, ideální je i pro střední školy jako výuková pomůcka. Jádro stavebnice tvoří programovatelná řídicí jednotka, kterou vyvinul tým z FEL ČVUT ve spolupráci s průmyslovými partnery. Stavebnici

    … více »
    Ladislav Hagara | Komentářů: 46
    29.5. 20:33 | Komunita

    Ubuntu bude pro testování nových verzí vydávat měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 25.10 (Questing Quokka).

    Ladislav Hagara | Komentářů: 0
    29.5. 14:55 | Nová verze

    Společnost Netgate oznámila vydání nové verze 2.8.0 open source firewallové, routovací a VPN platformy pfSense (Wikipedie) postavené na FreeBSD. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    29.5. 14:00 | Nová verze

    Byla vydána nová verze 6.16 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Tor Browser byl povýšen na verzi 14.5.3. Linux na verzi 6.1.140. Další změny v příslušném seznamu.

    Ladislav Hagara | Komentářů: 0
    29.5. 12:33 | Zajímavý článek

    Člověk odsouzený za obchod s drogami daroval letos ministerstvu spravedlnosti 468 kusů kryptoměny bitcoin, které pak resort v aukcích prodal za skoro miliardu korun. Darováním se zabývá policejní Národní centrála proti organizovanému zločinu (NCOZ). Deníku N to potvrdil přímo ministr spravedlnosti Pavel Blažek (ODS). Podle resortu bylo nicméně vše v souladu s právem.

    Ladislav Hagara | Komentářů: 59
    28.5. 20:44 | Nová verze

    Svobodný a otevřený multiplatformní editor EPUB souborů Sigil (Wikipedie, GitHub) byl vydán ve verzi 2.5.0. Stejně tak doprovodný vizuální EPUB XHTML editor PageEdit (GitHub).

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (56%)
     (31%)
     (7%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 172 hlasů
     Komentářů: 13, poslední 30.5. 12:26
    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.