?? unix c++ day01 筆記.txt
字號:
unix C++ day01 筆記
五天的課程計(jì)劃:
第一天:文件系統(tǒng)
第二天:多進(jìn)程
第三天:進(jìn)程間通信
第四天:網(wǎng)絡(luò)介紹
第五天:網(wǎng)絡(luò)通信實(shí)戰(zhàn)
unix下編程習(xí)慣 1、返回整數(shù)時(shí) 成功返回 0(>0),失敗返回-1(<0)
2、返回指針時(shí) 成功返回正常指針(非空),失敗返回空指針(NULL)
3、數(shù)據(jù)類型: xxxx_t 表示整數(shù)
4、要取得數(shù)據(jù)先準(zhǔn)備好存放數(shù)據(jù)的地方:int getxxx( X* buf , ...)
例:char* buf; | chr buf[20];
buf=new char[20];
getname(buf);
顯示主目錄(主路徑)的命令:pwd , echo $HOME
顯示所有環(huán)境變量:env 或 set
每個(gè)用戶都有一個(gè)uid,至少屬于一個(gè)組
取得環(huán)境變量:int main(int argc,char* argv[],chr* env[]); (參看課堂代碼env.cc)
每個(gè)指針指向一個(gè)環(huán)境變量字符串,以NULL為結(jié)束
如果一個(gè)指針數(shù)組沒有告訴元素個(gè)數(shù),一定用NULL作為這個(gè)數(shù)組的結(jié)束標(biāo)記
取得某個(gè)環(huán)境變量的值:char* getenv(const char* name) (參看課堂代碼getenv.cc)
參數(shù)是環(huán)境變量的名字,正確返回環(huán)境變量的值,出錯(cuò)返回NULL
頭文件<cstdlib>或<stdlib.h>
例:char* p=getenv("PATH");
修改環(huán)境變量的值:int putenv(const char* str);
參數(shù)是新的環(huán)境變量和值,正確返回0,出錯(cuò)返回-1
頭文件<cstdlib>或<stdlib.h>
例:putenv("MYVAR=GOOD");
設(shè)置的環(huán)境變量只對本進(jìn)程或子進(jìn)程有效,當(dāng)前工作目錄也只對本進(jìn)程或子進(jìn)程有效
進(jìn)程:一份正在執(zhí)行的程序
ps -ef 查看系統(tǒng)中運(yùn)行的所有進(jìn)程 PID就是進(jìn)程id
ps 查看當(dāng)前終端運(yùn)行的程序
ps -l 查看進(jìn)程運(yùn)行的狀態(tài)
常見狀態(tài):O 正在運(yùn)行
S 睡眠,等待調(diào)度
R 已裝載,準(zhǔn)備就緒,可以運(yùn)行
Z 僵死進(jìn)程,已結(jié)束但不釋放資源
T 已停止,掛起狀態(tài),處于掛
ps -f -p 進(jìn)程號 查看此進(jìn)程的父進(jìn)程
init的進(jìn)程id總是1
用戶信息操作函數(shù): (參看課堂代碼getenv.cc)
頭文件:<unistd.h>
char* getlogin(); 得到用戶登錄名
int getuid(); 得到當(dāng)前登錄用戶的用戶ID號
int geteuid(); 得到當(dāng)前運(yùn)行該進(jìn)程的有效用戶ID
頭文件:<pwd.h>
struct passwd* getpwuid(int userid); 根據(jù)用戶ID取得用戶的完整信息,返回一個(gè)指向passwd的結(jié)構(gòu)指針
struct passwd* getpwnam(const char* username); 根據(jù)用戶名取得用戶的完整信息
用戶組信息操作函數(shù):
頭文件:<unistd.h>
int getgid(); 得到當(dāng)前登錄用戶組的ID
int getegid(); 得到當(dāng)前運(yùn)行:該進(jìn)程的有效用戶組ID
頭文件:<grp.h>
struct group* getgrgid(int groupid); 根據(jù)一個(gè)組ID取得這個(gè)組的信息(不一定是完整的)
文件系統(tǒng):
任何操作系統(tǒng)的文件都是樹形結(jié)構(gòu)。
絕對路徑-----以根開頭的路徑為絕對路徑
相對路徑-----以當(dāng)前目錄為出發(fā)點(diǎn)的路徑
目錄操作:(參看課堂代碼:directory.cc)
創(chuàng)建一個(gè)新的目錄:
int mkdir(const char* name,int mode);
name---目錄名
mode---權(quán)限
頭文件<sys/stat.h>
成功返回0(大于0),失敗返回-1(小于0)
刪除一個(gè)目錄:
int rmdir(const char* name);
name---目錄名
頭文件<unistd.h>
成功返回0(大于0),失敗返回-1(小于0)
取得當(dāng)前工作目錄:(參看課堂代碼getcwd.cc)
char* getcwd(char* buf,int size);
頭文件<unistd.h>
buf用于存放結(jié)果,把取得的當(dāng)前工作目錄放到buf指向的地方,
buf是事先準(zhǔn)備好的空間地址,必須指定大小
size是buf的長度,如果buf的長度是len,size通常傳len-1,留一個(gè)存放'\0'
返回類型與buf中的內(nèi)容是一致的
改變當(dāng)前工作目錄:
int chdir(const char* name);
頭文件<unistd.h>
name是新目錄名
成功返回0(大于0),失敗返回-1(小于0)
打開一個(gè)目錄:頭文件<dirent.h>
DIR* opendir(const char* dirname);
用一個(gè)DIR指針來代表這個(gè)目錄
讀取目錄中的一個(gè)目錄項(xiàng):
struct dirent* readdir(DID* dirp);
每次讀取目錄中的一個(gè)目錄項(xiàng)
根據(jù)返回指針是否為空判斷是否讀完
dirent結(jié)構(gòu)中,d_name成員用于保存目錄項(xiàng)的名稱。
關(guān)閉一個(gè)被打開的目錄:
int closedir(DIR* dirp);
文件操作:
打開文件:int open(const char* pathname,int flag,...);
頭文件<fcntl.h>,<sys/stat.h>,<sys/types.h>
pathname是一個(gè)文件的全名(包含文件路徑)
flag這是一個(gè)表示文件打開方式的值,它只能從幾個(gè)特定的值中選擇
(O_RDONLY只讀模式,O_WRONLY只寫模式,O_RDWR讀寫方式)這三種方式必選其一其只能選一個(gè)
O_APPEND,追加方式,
O_CREATE如果文件不存在就創(chuàng)建,這個(gè)模式需要額外提供一個(gè)文件權(quán)限的參數(shù)
O_EXCL獨(dú)占模式需和O_CREATE聯(lián)合使用,
O_TRUNC打開文件同時(shí)清空內(nèi)容
open函數(shù)返回值:是一個(gè)文件描述符,如果其小于0舊表示文件打開操作失敗。
例:int fd=open(argv[1], O_WRONLY|O_CREAT, 0666);
讀文件:size_t read(int fd,void* buf,size_t nbytes)
頭文件<unistd.h>
fd是由open函數(shù)返回的文件描述符,表示讀哪個(gè)文件
buf用于存儲讀入的數(shù)據(jù),即從文件中讀的數(shù)據(jù)放到哪里,在使用read前要為其申請空間
nbytes要讀多少字節(jié)的數(shù)據(jù)
返回值:如果執(zhí)行成功,返回一個(gè)>0的整數(shù),表示本次讀取操作實(shí)際讀入的字節(jié)數(shù),失敗返回-1
寫文件:size_t write(int fd,void* buf,size_t nbytes);
頭文件<unistd.h>
fd是由open函數(shù)返回的文件描述符,表示讀哪個(gè)文件
buf用于存儲要寫入文件的數(shù)據(jù),即要寫的數(shù)據(jù)在哪里
nbytes想寫入文件多少字節(jié)的數(shù)據(jù)
返回值:如果執(zhí)行成功,返回一個(gè)>0的整數(shù),表示本次實(shí)際寫入的字節(jié)數(shù),失敗返回-1
關(guān)閉文件:int close(int fildes);
頭文件<unistd.h>
fildes是文件描述符
文件描述符:由系統(tǒng)內(nèi)核產(chǎn)生,非負(fù)整數(shù),shell產(chǎn)生三個(gè)標(biāo)準(zhǔn)文件描述符(0,1,2)對應(yīng)于(cin,cout,cerr),cin,cout可以重定向,cerr不能重定向
修改與fd對應(yīng)的文件中文件偏移量的值,動(dòng)態(tài)調(diào)整文件指針:
off_t lseek(int fd,off_t offset,int whence)
fd文件描述符,
offset文件偏移量,
whence移動(dòng)策略(以哪里為基準(zhǔn))
SEEK_SET,文件首,偏移量需為非負(fù),
SEEK_CUR,文件當(dāng)前位置,
SEEK_END文件尾,偏移量需為負(fù)值
返回值:成功返回>0的整數(shù),表示挪動(dòng)的字節(jié)數(shù),失敗返回<0的數(shù)
注意如果偏移量的設(shè)置不正確會遭成文件空洞
文件權(quán)限判斷:
int access(const char* path,int amode)
path:文件名
amode:判斷的模式,R_OK,讀權(quán)限 W_OK,寫權(quán)限 X_OK,執(zhí)行權(quán)限 F_OK,文件是否存在
返回值為0或大于0操作成功,小于0操作失敗。
作業(yè): 1、寫一個(gè)程序,在當(dāng)前用戶的主目錄下建一個(gè)子目錄名叫data,權(quán)限0755,
在這個(gè)子目錄中建一個(gè)文件a.txt,在文件中寫一些數(shù)據(jù),如:hello,UNIXC!
2、寫一個(gè)程序,實(shí)現(xiàn)產(chǎn)生不重復(fù)的id
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -