| 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 |
|
|
|