| | |  |  | czus mám problém s funkcí substr() v c++, dělám virtuální linux konzoli pro soutěž u nás ve škole a mám tam následující "architekturu": pro každý trošku důležitější (kořenový) adresář je vyhrazena funkce, např. pro /sbin je vyhrazena funkce void sbin() a ta se volá hned na začátku.. a mám tam blok podmínek pokud se zadá korektní příkaz tak se provede to a to. ale mám problém s příkazy typu rm a cd. když zadám třeba rm kernel tak v pořádku kernel se odstraní protože je tento příkaz v bloku podmínek, když zadám jen rm taky v pořádku ale vyhodí mě to že soubor nebyl nalezen. ale když zadám rm necoconeexistuje tak už mě to hodí chybu, že soubor nebyl nalezen ptže není v podmínkovém bloku. zkoušel jsem použít funkci substr() která přečte dejme tomu v našem případě první dva znaky to rm a podle toho se zachová. zkoušel jsem toto: if ( command.find("rm") ) ale dostal jsem znovu ERROR: Command not recognized a pak ještě toto:
 if (command.substring(0,5).equals("rm") { proved vec...() } a to taky nefachalo může někdo poradit jak správně použít tuto funkci v podmínce ? díky
 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 9:32 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | proc si nevypises, co mas v tom commandu? nejsem expert na metody stringu, ale substring(0,5).equals("rm") .... nema to byt (0,2) ??
 (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 10:14 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | máš pravdu má.. sry má tam být 0,2 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 10:17 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | a ani s tim to nefunguje? hodil by se kus zdroje :) (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 10:19 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | ok posílám kus zdroje je to funkce void sbin() : void sbin() problém jsem označil // poznámkou
 {
 string command;
 system("cls");
 commands:
 cout << "/sbin>";
 getline(cin, command);
 if ( command == "help" )
 {
 cout << "Function list and uses\n";
 cout << "======================\n";
 cout << "\n";
 cout << "cd ------- Change Directory - Navigate around the file system\n";
 cout << "cat ------ Open a file to view its contents\n";
 cout << "help ----- Show this menu\n";
 cout << "ls ------- List files/folders in a directory\n";
 cout << "cls ------ Clear Screen - empty the screen of all data\n";
 cout << "rm ------- Remove File - Delete a file\n";
 cout << "\n";
 goto commands;
 }
 if ( command == "ls" )
 {
 cout << "dhclient\n";
 cout << "dhclient-script\n";
 cout << "dmesg\n";
 cout << "ifconfig\n";
 cout << "init\n";
 cout << "ipf\n";
 cout << "ipfs\n";
 cout << "ipfstat\n";
 cout << "ipfw\n";
 cout << "ipmon\n";
 cout << "ipnat\n";
 cout << "kldload\n";
 cout << "kldunload\n";
 cout << "ldconfig\n";
 cout << "mount\n";
 cout << "mount_mfs\n";
 cout << "mount_msdos\n";
 cout << "ping\n";
 cout << "reboot\n";
 cout << "route\n";
 cout << "shutdown\n";
 cout << "sysctl\n";
 cout << "unmount\n";
 cout << "\n";
 goto commands;
 }
 if ( command == "cls" )
 {
 system("cls");
 goto commands;
 }
 if ( command.substring(0,2).equals("rm") )          //tady!!!!
 {
 cout << "File could not be found in: /sbin\n";
 cout << "\n";
 goto commands;
 }
 if ( command == "rm dhclient" )
 {
 cout << "File was Successfully deleted\n";
 cout << "\n";
 goto commands;
 }
 else
 {
 cout << "ERROR: Command not recognized\n";
 cout << "\n";
 goto commands;
 }
 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 10:27 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | je to zatím rozdělaný--- bez booleanů nechcu jít dál dokud nevyřeším tenhle problém pak by v tom byl bordel 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 10:32 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | 1) if (command.substr(0,2) == "rm") 
 2) bude nejlepsi dat tuhle podminku az za vsechny ostatni, ktery hledaj "rm", protoze i kdyz das "rm dhclient" tak to splni hned prvni podminku...
 
 3) nebude lepsi si to rozdelit do mensich funkci, treba rm(string), rozdelit si prikaz na tokeny podle prazdnejch znaku a do ifu nacpat jenom if ("rm") { rm(token2); }
 
 
 
 
 (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 10:54 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | to by šlo moh bys mě to prosím tě trošku víc osvětlit ? jinak díky za to už to funguje ale to s těma tokenama bys mě mohl trošku popostrčit protože já mazání souborů zatím řeším přes bool, takže na začátku void sbin(); mám třeba bool dhclient = true; a pak v tom seznamu ls mám nad dhclient podmínku if (dhclient) no a když pak použiju ten příkaz rm dhclient tak mě to vyhodí file was successfully deleted a hodnota bool dhclient se nastaví na false ale tohle vypadá komplexnější 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 11:04 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | tady mas priblizne co jsem myslel... [link] (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 11:44 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | joo díky moc jsi mě pomohl ;) 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 11:47 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | a ještě bych měl jednu menší otázečku... jak jsem říkal každej adresář mám ve spešl funcki ale... používám booleany (teď už jen k těmto účelům) jako .. no dalo by se to přirovnat.. mám zkrátka v tom programu pár úkolů (smazat pár souborů, logy a resetovat systém) a k tomu právě požívám booleany ale problém je v tom že když mám na začátku funkce všechny hodnoty nastavené na false, a člověk mezitím nějakou určitou akcí přenastaví na true, tak kdyby náhodou z jinýho "adresáře" (funkce) zavoloal znovu tu starou funkci, všechny booleany by se znovu nastavily na alse neví někdo jak to ošetřit ? díky 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 12:29 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | ty mas stavy souboru reseny true = existuje, false = smazany???
 
 (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 12:59 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | jo přesně tak dívej se mám to nějak taghle: void sbin()
 {
 bool dulezity-soubor = true;  /existuje
 bool soubor-s-logy = true;  //existuje
 bool restartovano = false;  //neexistuje
 }
 to je jen příklad na začátku jsou všechny nastavený na true... no a když třeba smažeš soubor s logy a onen "důležitý soubor" změníš tím ty hodnoty na false.. ale když je třeba user v kořenovém adresáři... najednou si zamane že si půjde znovu do sbin a znovu zavolá funkci void sbin() znovu se všechny nastaví na původní hodnotu a to já nechcu
 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 13:04 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | no, nechci menit celou tvoji koncepci, ale nebylo by dobry udelat ten filesystem trochu interaktivnejsi? :) aby bylo mozny pridavat a kopirovat soubory, ktery nemusis napevno busit do programu? udelej filesystem jako stromovou strukturu, do kterej budes pridavat/menit dalsi vetve atd. pouzij k tomu treba tridu map [link]
 a nad ni stavej operace pro kopirovani/mazani/placani
 (odpovědět)
 |  | | naked | 81.92.155.* | 30.4.2007 13:30 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | tak jo díky zkusím to vypadá to rozhodně jednodušeji než můj "dosavadní" program ptže ten zabírá nekřesťanský množství paměti 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 13:32 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | Pokud to má brát příkazy, tak si udělej syntaktický analyzátor - na to potřebuješ znát konečný stavový automat a implementovat ho. Takže nejdřív koukni na to. nebudeš pak řešit takovéhle pseudoproblémy, které se při promyšleném zpracování vůbec objevit nemají.
 (odpovědět)
 |  | | guguma | 195.113.79.10/10.0.10.* | 30.4.2007 17:23 | 
 | 
 | 
 | 
| | | | re: Funkce substr()  v c++ | # | 
 |  | no promyšlené zpracování je přesně to co můj program nemá. jeho jediný účel je trošku nasimulovat bash a provést uživatele alespoň základy linuxu než do toho půjde "naostro" dalo by se to považovat za simulátor rootování i když když máte dva comply na síti a pár linuxů, klidně i livecd, můžete si rootování užít až dosyta a reálně :D 
 ----------
 Hello world! Segmentation fault. Core dumped.
 (odpovědět)
 |  | | D@N |  |  223163359 | 30.4.2007 19:02 | 
 | 
 | 
 |