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 08:00 | Nová verze

    Po půl roce vývoje od vydání verze 5.8 byla vydána nová verze 5.9 svobodného open source redakčního systému WordPress. Kódové označení Josephine bylo vybráno na počest jazzové zpěvačky, herečky, tanečnice a bojovnice za svobodu a rovnoprávnost Josephine Bakerové.

    Ladislav Hagara | Komentářů: 0
    dnes 07:00 | Bezpečnostní upozornění

    Byly zveřejněny informace o zranitelnosti PwnKit zneužitelné k lokální eskalaci práv, aneb rootem snadno a rychle, pomocí pkexec z balíčku polkit. Jedná se o CVE-2021-4034 s CVSS 7.8. Zranitelné jsou všechny verze pkexec od první verze vydané v květnu 2009, tj. posledních více než 12 let. V upstreamu je chyba již opravena.

    Ladislav Hagara | Komentářů: 5
    včera 16:55 | Nová verze

    Flameshot (GitHub), nástroj pro vytváření a úpravu snímků obrazovky postavený nad frameworkem Qt, byl vydán ve verzi 11.0.0. Změněno bylo číslování verzí. Verze 11 následuje po verzi 0.10.

    Ladislav Hagara | Komentářů: 2
    včera 09:00 | Komunita

    V pátek 28. ledna začíná 14. ročník konference DevConf.CZ. Jde o každoroční komunitní konferenci pro vývojáře, administrátory, DevOps inženýry, testery, autory dokumentace a další přispěvatele či uživatele technologií open source. Konference proběhne podruhé online, a to v termínu 28. - 29. ledna.

    … více »
    Dorka | Komentářů: 6
    včera 08:00 | Nová verze

    Byla vydána nová verze 2.35.0 distribuovaného systému správy verzí Git. Přispělo 93 vývojářů, z toho 35 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    včera 07:00 | Zajímavý software

    Giada je open source minimalistický softwarový nástroj pro tvorbu hudby navržený pro diskžokeje, elektronické hudebníky a živou produkci. Vydána byla verze 0.20.0 aneb Alicanto. Vedle zdrojových kódů je ke stažení také balíček ve formátu AppImage.

    Ladislav Hagara | Komentářů: 0
    včera 06:00 | Nová verze

    Byla vydána první alfa verze nové major verze 4.0 multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 3
    24.1. 18:11 | Komunita

    Vývojáři Ubuntu MATE oznámili vydání Ubuntu MATE 21.10 pro 8 palcový UMPC notebook GPD Pocket 3.

    Ladislav Hagara | Komentářů: 0
    24.1. 13:22 | Zajímavý software

    Počítačová hra Oil Rush (Wikipedie) od UNIGINE běžící také na Linuxu byla vydána 25. ledna 2012. K desátému výročí je hra na Steamu zdarma.

    Ladislav Hagara | Komentářů: 0
    24.1. 12:44 | Nová verze

    Byla vydána nová verze 1.10.0 multiplatformního frontendu k emulátorům, herním enginům a multimediálním přehrávačům RetroArch (Wikipedie). Přehled novinek v příspěvku na blogu. RetroArch je k dispozici také na Steamu.

    Ladislav Hagara | Komentářů: 0
    Jestliže jste používali distribuci CentOS Linux, jejíž konec byl oznámen před rokem, kam jste přešli?
     (30%)
     (1%)
     (8%)
     (20%)
     (1%)
     (4%)
     (36%)
    Celkem 214 hlasů
     Komentářů: 14, poslední 14.1. 14:44
    Rozcestník

    The simple custom shell

    26.10.2021 16:25 | Přečteno: 1451× | C | poslední úprava: 26.10.2021 17:56

    As the comment to that.

    #include <stdio.h>
    
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <string.h>
    #include <unistd.h>
    
    static char **enviroment;
    
    void command_info()
    {
    	pid_t pid;
    	int status;
    	char *parameters[]={"uname", "-a", NULL};
    	
    	pid=fork();
    	if(pid == 0)
    	{
    		execve("/bin/uname", parameters, enviroment);
    		perror("execve");
    	}
    	else
    		wait(&status);
    }
    
    int loop()
    {
    	char buffer[1000];
    	
    	memset(buffer, 0, 1000);
    	
    	fgets(buffer, 1000, stdin);
    	
    	if(strncmp(buffer, "help", 4) == 0)
    	{
    		puts("Commands: help info exit");
    		return 0;
    	}
    	
    	if(strncmp(buffer, "info", 4) == 0)
    	{
    		command_info();
    		
    		return 0;
    	}
    	
    	if(strncmp(buffer, "exit", 4) == 0)
    	{
    		return 1;
    	}
    	
    	return 0;
    }
    
    int main(int argc, char **argv, char **env)
    {
    	enviroment=env;
    	
    	while(1)
    		if(loop()==1)
    			break;
    	
    	return 0;
    }
    
           

    Hodnocení: 48 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    26.10.2021 17:12 Mayhem
    Rozbalit Rozbalit vše Re: The simple custom shell
    Co s tim jako? Stringy natvrdo, jejich delky natvrdo, uchylny coding style (nepouzivani zavorek dokonce i u cyklu)...
    26.10.2021 17:42 debianův fanoušek
    Rozbalit Rozbalit vše Re: The simple custom shell
    Haters gona hate.
    27.10.2021 07:39 Rustêj
    Rozbalit Rozbalit vše Re: The simple custom shell
    To neni hejt ale konstruktivni kritika. Program bezi v nekonecne smycce - zly pattern. Dva krat includuje stejne hacko :) Memset s bufferem? To je potencialni dira a memleak. Proste smazat a prepsat do Rustu bude nejlepsi.
    27.10.2021 08:05 KKK
    Rozbalit Rozbalit vše Re: The simple custom shell
    Rust je meme.
    27.10.2021 18:11 turboPackal
    Rozbalit Rozbalit vše Re: The simple custom shell
    Pro mne za mne at je i tahounem okamurovy kampane. Kdyz je lepsi jak C, hlavne v sprave pameti tak co resis ?
    27.10.2021 18:55 KKK
    Rozbalit Rozbalit vše Re: The simple custom shell
    Rusthead fanatiky.
    27.10.2021 21:58 turboRaku
    Rozbalit Rozbalit vše Re: The simple custom shell
    Rust fanatici neexistuji, jsou proste slechta a na c-plebs hledi s despektem. Fanatici jsou Perliste, ti dokazou deseti extatickymi zpusoby ospevovat nejdokonalejsi jazyk na zemi, ktery je tak dokonaly ze na nej uz 10 let nikdo nesahnul ale bude jeste jeden ultimatni zvany Raku. Ale az v roce 2048.
    29.10.2021 10:15 Mayhem
    Rozbalit Rozbalit vše Re: The simple custom shell
    Javistum je jedno, becauseWeKnowWeAreBetter(We.THE_BEST);
    29.10.2021 18:40 Svētlo
    Rozbalit Rozbalit vše Re: The simple custom shell
    Blbost. Javiste jsou vesmes rozumni lide a vedi, ze java neni zadny zazrak. Ale da se s ni hezky vydelat tak jsou pragmaticti. Pres den javuji v korporatu a vecer rustuji open source :-) Inu uz i Linus jde s dobou a casti kernelu se zacnou delat v rustu.
    27.10.2021 09:53 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: The simple custom shell
    Memset s bufferem? To je potencialni dira a memleak.

    Mohl byste tuhle myšlenku nějak objasnit? Samozřejmě by čistší bylo

            memset(buffer, 0, sizeof(buffer));
    

    nebo raději rovnou

            char buff[BUFF_LEN] = {};
    

    nebo

            char buff[BUFF_LEN] = "";
    

    ale jak z inicializace lokální proměnné uděláte memleak, to bych si docela rád poslechl.

    Asi je to profesionální deformace, ale spíš mi vadí ten samotný nápad mít takhle velkou proměnnou na stacku.

    27.10.2021 11:04 johnyK | skóre: 1 | blog: uxblog
    Rozbalit Rozbalit vše Re: The simple custom shell
    mít takhle velkou proměnnou na stacku.
    napr. u funkce, ktera pise do logu a jako parametr dostane vetsi text se s ti neco udelat musi.

    Co pouzivate potom. Static, malloc, extern ?

    Ja pouzivam static uvnitr funkce a priznam se, ze jsem vlastne nikdy nezkousel, kde se to uklada :-) , ja jsem si myslel, ze tyhle permanentni veci by mely skoncit v datovem segmentu, ale jisty si vlastne nejsem. Vi to nekdo na 100%? Co pouzit kdy?
    27.10.2021 11:24 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: The simple custom shell
    Záleží na konkrétní situaci, ale většinou bych upřednostnil dynamickou alokaci, tj. malloc() apod. V jádře je vzhledem k velikosti stacku tlak na šetření hodně velký, ale ani v userspace není dobré si představovat, že je stack nekonečný. Resource limit na velikost stacku (ulimit -s) sice bývá něco jako 8 MB, ale to je pro všechny thready dohromady, takže u multithreadových programů běžně používám stack o velikosti 64 KB nebo dokonce 16 KB - a pak už si rozmyslíte, jestli tak velkou část zaplácnout nějakým bufferem.
    27.10.2021 18:19 Rustêj
    Rozbalit Rozbalit vše Re: The simple custom shell
    Kdyz uz bastlis v Ccku tak si neco precti o alokaci pameti, jedine dynamicka je bezpecna. I staticka je delana pres pointry a kdyz ti tam nekdo natriska 1000 emoji tak ani Kernighan s Richiem nebudou vedet kam ta pamet ustreli kamarade. Dej na mou radu, prepis to do Rustu a tohle resit pak nemusis.
    27.10.2021 20:04 johnyK | skóre: 1 | blog: uxblog
    Rozbalit Rozbalit vše Re: The simple custom shell
    kdyz se v nejake funkci misto stovek lokalnich definec nejakych bufferu udelaji malloc-y, a ta funkce se milionkrat vyvola, tak to ma dve vyhody:

    - je mozne si jit udelat kafe, protoze to trochu trva

    - to kafe je mozno si ohrat hned na tom procesoru

    Kdyz se navic ty malloc-y trochu parametrizujou, tak je mozno takovy program nasadit jako memtest utilitu ...

    at zije Rust a vsechny moderni programy

    P.S. jeste takovou PERLicku:

    my dodavame programy do firmy, ktera se nachazi v obci Rust a kolega kdysi delal nekolik excelovych zpracovani pro mestsky urad v obci Perl. Je zajimave, ze pro radu programu existuje obec, ktera se zrovna tak jmenuje :-)
    27.10.2021 20:35 jiwopene | skóre: 30 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: The simple custom shell
    my dodavame programy do firmy, ktera se nachazi v obci Rust a kolega kdysi delal nekolik excelovych zpracovani pro mestsky urad v obci Perl. Je zajimave, ze pro radu programu existuje obec, ktera se zrovna tak jmenuje :-)
    + ještě Kotlin a Java.

    Lua, Saint-Python, Cobol, Fortran, Scala, C++, Ruby, …
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    27.10.2021 21:52 Rustêj
    Rozbalit Rozbalit vše Re: The simple custom shell
    S necim si to pletes. Jak malloc tak memset ma svou alokacni rezii, ktera je (z hlediska OS) temer stejna. Tebou popisovany pripad je blbost uz sama o sobe, nikdo by to takhle nedelal a pouzil by globalnejsi store. A v Perlu jim vypust pythona :-)
    Heron avatar 27.10.2021 22:22 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: The simple custom shell
    Když je tu tolik Rustařů, nechcete o tom napsat nějaký motivační / bootovací článek? Používám golang, jsem s ním spokojený, dokonce už jsem si zvykl na hroznou syntax, ale tak nějak cítím, že vlastně chci rust, ale s jednoduchostí golangu / pythonu.

    Golang je super v několika věcech. Jedna statická binárka. Crosscompilace v základu (vůbec ty tools jsou navržené dobře). Na widlích pomocí dvou příkazů udělám binárky pro freebsd i linux. Velmi snadný koncept paralelizace. Kanály jsou tak nějak přesně to, co chci. Statické a silné typování. Rád vytvářím specifické typy a k nim metody (i když syntaxe func receiver je teda hrozná). Automatická správa paměti.

    Teď odvrácená strana. Výkon rustu je 3x větší (což je mi vlastně jedno, před dvěma lety jsem to měl v pythonu), ale proč si ho nevzít. Rust má skvělý borrow checker. Resp. celý systém varování kompilátoru. Tohle mne zaskočilo asi nejvíc, golang má statickou silnou kontrolu a přes to mu zjevné věci unikají. Nějak jsem se tomu vyhnul, ale jednou to přijde. (Ve skutečnosti největší problém, na který jsem na počátku narážel bylo to, kdo a kdy má uzavírat channel. Někde jsem viděl, že rust compiler dokáže detekovat deadlock už během kompilace.)

    Největší problém rustu vidím v komplikované cross compilation. Možná se to pohlo, nemám čas to sledovat. Vůbec nevím, jak je to se standardní knihovnou. Vždy se, pokud je to možné, vyhýbám externím závislostem. Jasně, driver pro databázi tak nějak potřebujete vždy. Knihovnu pro escape sekvence pro barvičky v terminálu importovat nechci. (To si ji raději napíšu sám.)

    Potom syntax. Moc se mi nelíbí to označování mut, move, (borrow) apod. Podle mého názoru by si to měl vyřešit compiler. V golangu je garabge collector, všechno se by default kopíruje (bohužel i pointery) a kdo chce, může používat reference (ale zase, každou proměnnou označovat hvězdičkou... prostě ta syntax je divná).
    28.10.2021 10:07 jiwopene | skóre: 30 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: The simple custom shell
    Co se týče cross-kompilace, tak mám s Rustem celkem dobré zkušenosti (asi letošní březen) – nainstaloval jsem toolchain (kompilátor + std + …), zkompiloval pro armv7 (na amd64) a fungovalo to.

    Jinak jsem v opačné situaci – používám Rust, ale neustále si říkám, že bych měl zkusit Golang.

    move s Vámi soublasím – to by měl řešit spíš kompilátor. Na druhou stranu, proti let mut/mut nic nemám (pořád hezčí než const v C++) – alespoň si v tom musím udělat jasno předem. (Kotlin má val (jako let) a var (jako let mut) a tam mě to spíš obtěžuje, zčásti protože si tato klíčová slova jsou tak podobná, že se snadno spletou.)
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    Heron avatar 28.10.2021 12:50 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: The simple custom shell
    Ano, ten koncept, že je všechno immutable a je nutné označit mutable se mi líbí víc, než naopak psát const a potom na to někde zapomenout.
    29.10.2021 17:24 Martin Tůma | skóre: 39 | blog: RTFM | Praha
    Rozbalit Rozbalit vše Re: The simple custom shell
    Asi je to profesionální deformace, ale spíš mi vadí ten samotný nápad mít takhle velkou proměnnou na stacku.

    Mě teda spíš vadí to, že má takhle velkej buffer, když do něj čte maximálně 4 byty... Víc commandů za sebou to neumí, zbytek načteného bufferu stejně zahazuje. Kdyby tam měl odpovídající - 4 bytovej buffer - tak si ho dovedu na stacku klidně představit i v kernelu :-). Celkově bych to nazval jako "céčko od ne-céčkaře" (vyloženě z toho čiší neznalost základních principů, jako co je v C string a jak je reprezentovaný, co je stream a jak funguje standardní vstup, ...). Nějak takhle asi vypadaj moje programy v pythonu ;-).

    Každý má právo na můj názor!
    vlastikroot avatar 1.11.2021 12:08 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: The simple custom shell

    Asi je to profesionální deformace, ale spíš mi vadí ten samotný nápad mít takhle velkou proměnnou na stacku.

    Podle me 1000 bytu je mala promena, pokud se bavime o platforme, kde nejmensi velikost pridelene pameti na stack je jedna stranka (takze da se rict kazda platforma s MMU). Pokud uz je stack naalokovany, je to nejefektivnejsi metoda, jak ziskat docasnou pamet - jen se navysi stack pointer (proto ma alloca obcas svuj smysl, treba kod llvm je toho plny).
    We will destroys the Christian's legion ... and the cross, will be inverted
    1.11.2021 12:39 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: The simple custom shell
    Podle me 1000 bytu je mala promena, pokud se bavime o platforme, kde nejmensi velikost pridelene pameti na stack je jedna stranka (takze da se rict kazda platforma s MMU).

    A taková proměnná vám zabere čtvrtinu té stránky, to je docela dost, aby se nad tím vývojář aspoň řádně zamyslel. Nemluvě o tom, že v civilizovaném programu těch 1000 nebude natvrdo zadrátovaná konstanta, čímž se problém posouvá na novou úroveň. (Viz např. čistka VLA v jádře pár let zpátky.)

    proto ma alloca obcas svuj smysl, treba kod llvm je toho plny

    Snad jsou aspoň trochu prozíravější než autor resolveru v glibc, který také miluje alloca(), ale bohužel má malou představivost ohledně toho, jak velká může být odpověď nebo kolik IPv6 adres může host používat, takže ten zásobník tu a tam přeteče…

    vlastikroot avatar 1.11.2021 18:25 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: The simple custom shell
    To jakoze ten glibc resolver dokaze vyzrat ten defaultni nekolikamegovy stack ? :-D Nebo se jedna o nejaky nedefaultni runtime?
    We will destroys the Christian's legion ... and the cross, will be inverted
    1.11.2021 19:10 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: The simple custom shell
    V tom případě, který jsem řešil, to stačilo to na přetečení stacku v nějaké javové aplikaci. Velikost byla IIRC 256 KB a podle všeho to byl default, nijak s jeho velikostí nehýbali.
    26.10.2021 18:10 debian+ | skóre: 29 | blog: analyzy
    Rozbalit Rozbalit vše Re: The simple custom shell
    Co s tim jako?
    Reakce na tohle: https://www.abclinuxu.cz/poradna/linux/show/473630
    debian.plus@protonmail.com
    Gréta avatar 26.10.2021 18:44 Gréta | skóre: 34 | blog: Grétin blogísek | Stockholm
    Rozbalit Rozbalit vše Re: The simple custom shell

    jaktože to jakoby má jenom 23 zobrazení ale už 12 hlasů :D

    26.10.2021 19:18 debian+ | skóre: 29 | blog: analyzy
    Rozbalit Rozbalit vše Re: The simple custom shell
    Zo začiatku bol v náhľade o blogu aj kód, teraz už nie je.
    debian.plus@protonmail.com
    Gréta avatar 26.10.2021 19:19 Gréta | skóre: 34 | blog: Grétin blogísek | Stockholm
    Rozbalit Rozbalit vše Re: The simple custom shell
    26.10.2021 20:24 Bherzet | skóre: 19 | blog: Bherzetův blog
    Rozbalit Rozbalit vše Re: The simple custom shell
    A (skoro) všechny pozitivní. Od té doby průměr klesá.
    27.10.2021 12:02 _
    Rozbalit Rozbalit vše Re: The simple custom shell
    Zbytečné:
    while(1)
            if(loop()==1)
                break;
    Stačí naspat:
    while(loop() != 1)
    nebo == 0, ale to může mít jiný význam v závislosti na tom, jaké hodnoty vracíš.
    Gréta avatar 27.10.2021 17:22 Gréta | skóre: 34 | blog: Grétin blogísek | Stockholm
    Rozbalit Rozbalit vše Re: The simple custom shell

    while(!loop());

    29.10.2021 07:59 Mayhem
    Rozbalit Rozbalit vše Re: The simple custom shell
    Hlavne pouzivani cisel jako pravdivostnich mi prijde prasarna v dobe, kdy mame stdbool.h. Take vracet cislo je prasarna, kdyz v stdlib mame EXIT_*..
    29.10.2021 08:53 bul
    Rozbalit Rozbalit vše Re: The simple custom shell
    EXIT* jsou jen konstanty pro cisla :) Nekdo ma pamet na vyrazy, nekdo zas na cisla. Ve vysledne binarce to bude stejne.
    29.10.2021 10:12 Mayhem
    Rozbalit Rozbalit vše Re: The simple custom shell
    Ja vim, ale radeji vidim true/false a EXIT_* nez return 0/1, while(1), atd. Pro citelnost kodu mi to prijde zasadni. O globalni promenne, literalech natvrdo, delkach na tvrdo, zavorkach, mega polech na stacku, atd. radeji pomlcim. Pak ma to cecko nejak vypadat, kdyz zacatecnici vidi toto a povazuji to za normu.
    29.10.2021 10:13 Mayhem
    Rozbalit Rozbalit vše Re: The simple custom shell
    Na druhou stranu, nechci hanet autora kodu. Pokud mu jeho dilo plni ucel a nepada, pak je vsechno v poradku. Priste uz napise kod jiste citelneji.
    29.10.2021 18:43 sojovy uherak
    Rozbalit Rozbalit vše Re: The simple custom shell
    Ale my nehanime autora. My delame code review tomu paskvilu co vyprodukoval, to je rozdil :-)
    1.11.2021 15:38 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: The simple custom shell
    … radeji vidim true/false a EXIT_* nez return 0/1, while(1), atd.
    Souhlasím. Mám také raději „ukecanější” kód ze kterého je jasné co se kdy děje, než rébusy, u kterých lze návratovou hodnotu snadno zaměnit. Číselné hodnoty využívám jako návratovou hodnotu jen tam, kde potřebuji odchytnout konkrétní místo.

    Založit nové vláknoNahoru

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