編寫乙個file-drive的軟體許可權控制器:
檔案內容可以如下:
#注釋car.isprivate true
關於檔案的讀寫,是乙個迴圈,每讀取一行,就會去解析每一行的license,分理出裡面的key value對,並且把它們放入我們的 kvpair儲存起來
bool params::readfileparams (const str& filename)
str key, value;
while (getfileentry(ifs, key, value))
this->set(key, value);
return true;
}
通過閱讀以上的檔案來獲得軟體所有的許可權控制。
1. 先編輯乙個儲存 key/value 對的資料結構 kvpair
struct kvpair
kvpair(const kvpair& src)
kvpair& operator= (const kvpair& src)
return *this;
}str _key;
str _value;
str _readonly;
}
然後定義乙個控制器, params, 當然,我們不止乙個kvpair,所以在params類中,我們有一連串的kvpair
class params
std::vector_kvplist;
}
關於檔案的讀寫,是乙個迴圈,每讀取一行,就會去解析每一行的license,分理出裡面的key value對,並且把它們放入我們的 kvpair儲存起來
bool params::readfileparams (const str& filename)
str key, value;
while (getfileentry(ifs, key, value))
this->set(key, value);
return true;
}
其中關鍵是去讀去檔案中每一行的key/value 值,我們允許注釋行的加入,所以在解析的時候要去忽略注釋行,好在我們可以統一規定#開頭的為注釋行。
bool params::getfileentry (ifstream& ifs, str& key, str& value) const}}
else return false;
} while (!result);
return result;
}
還有乙個設定key/value的函式, set
// set a "key"
bool set (const str& key, const str& value); //
bool set (const str& key, int value); //
bool setbool(const str& key, bool value); //
bool set (const str& key, double value); //
bool set (const str& key, point value); //
bool params::set (const str& key, const str& value, bool readonlyflag = false) ; //
所有的set函式都會用到以下的set函式
// functions to set a "key".
//bool params::set (const str& key, const str& value, bool readonlyflag)
//key is read only
return false;}}
//// a new key, so add to the list.
//struct params::kvpair kvp;
kvp._key = key;
kvp._value = value;
kvp._readonly = readonlyflag;
_kvplist.push_back(kvp);
return true;
}
當然,我們在核對license的時候,也會去從kvpair中去獲取相應的key value對
bool params::getstr (const str& key, str& value) const
else
++p;
}// key not found.
return false;
}
總結:1. 上面的file-drive方式在軟體開發當中十分普遍,通過改變檔案的方式來改變軟體的整體控制也是十分普遍。
2. 上面的案例是乙個簡單的許可權控制器,當然我們還需當心多執行緒間的同時讀取,加以鎖的保護來進行處理,當然涉及到檔案的不同程序讀取,也要加file-lock進行保護。
關於檔案的讀寫,是乙個迴圈,每讀取一行,就會去解析每一行的license,分理出裡面的key value對,並且把它們放入我們的 kvpair儲存起來
bool params::readfileparams (const str& filename)
str key, value;
while (getfileentry(ifs, key, value))
this->set(key, value);
return true;
}
編寫乙個簡單的shell
include include include include include include include include void getloginname void gethostname void getdir p printf s p int main char argv 32 char...
編寫乙個簡單的死鎖
public class dead lock1 class runnable1 implements runnable catch exception e class runnable2 implements runnable catch exception e obj1 和 obj2 都是屬於類的...
乙個簡單的makefile的編寫
標頭檔案 part.h cpp檔案 包含part.h part.cpp cpp檔案 包含part.h partmain.cpp makefile編寫如下 main partmain.o part.o g o main partmain.o part.o partmain.o partmain.cpp...