星期二, 6月 22, 2010

[Linux] 當打錯command的時候怎麼辦....(#rm -rf /)

我個人常常打太快,常常rm的結果就是

#rm -rf /
慘了,電腦就得從灌了
Google了一下,發現真的沒甚麼方式可以recover,但皇天不負苦心人,可以用yum reinstall~~~~^^

#rpm -qa --qf '%{name}\n' | sort -u | xargs -i yum reinstall -y --verbose {}

星期一, 6月 21, 2010

[C++] convert string to int or boolean

http://www.codeguru.com/forum/showthread.php?t=358996
這個link有高手寫出C++ convert string to boolean,code如下

template
bool from_string(T &Value,const std::string &str,std::ios_base & (*f)(std::ios_base&))
// converts string to streamable value, and returns true on success and false otherwise.
{
std::istringstream stream(str);
stream>>f>>Value;
return (!stream.fail()) && stream.get()==std::istringstream::traits_type::eof();
}


如果是convert string to int,可以參考這個link
http://www.codeguru.com/forum/showthread.php?t=231054
code如下

template
bool from_string(T& t,
const std::string& s,
std::ios_base& (*f)(std::ios_base&))
{
std::istringstream iss(s);
return !(iss >> f >> t).fail();
}

如果是C的部分可以用atoi, atof function
但如果是str = "0" 會搞不清楚是fail return 0 還是convert to 0,如果是大於 INT_MAX,也就是 0x7FFFFFFF,就只會回傳 0x7FFFFFFF。

還有strtol functaion,可以參考下面的link
http://linux.die.net/man/3/strtol

至於atoi and strtol的差異就是strtol當有錯誤的時候,會設置errno
但atoi不能,所以可以說strtol是atoi的加強版,請參考下面的link
http://learn.akae.cn/media/ch25s03.html
https://www.securecoding.cert.org/confluence/display/seccode/INT06-C.+Use+strtol%28%29+or+a+related+function+to+convert+a+string+token+to+an+integer
所以建議用strtol