unix高级环境编程-基础知识
對于一個(gè)從C#轉(zhuǎn)向Linux/unix系統(tǒng)開發(fā)的菜鳥,中間無數(shù)次的焦頭爛額只有自己心理明白,所幸我沒有在大風(fēng)大浪中凋零破碎,依然堅(jiān)挺著我的學(xué)習(xí)之路。
Unix操作系統(tǒng)結(jié)構(gòu):
UNIX ,是一個(gè)強(qiáng)大的多用戶、多任務(wù)操作系統(tǒng),支持多種處理器架構(gòu),按照操作系統(tǒng)的分類,屬于分時(shí)操作系統(tǒng),最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的貝爾實(shí)驗(yàn)室開發(fā)。
?? 嚴(yán)格意義上講,可將操作系統(tǒng)定義為一種軟件,可以直接控制硬件資源,提供程序運(yùn)行環(huán)境,我們可以稱之為內(nèi)核。內(nèi)核的接口可以稱為系統(tǒng)調(diào)用,公用函數(shù)庫建立在系統(tǒng)調(diào)用之上,應(yīng)用軟件既可以使用公用函數(shù)庫也可以使用系統(tǒng)調(diào)用。shell是一種特殊的應(yīng)用程序,它為運(yùn)行其他應(yīng)用程序提供接口。
?? 廣義上講,操作系統(tǒng)也包括內(nèi)核和其他的一些軟件。
文件系統(tǒng)和目錄
文件系統(tǒng):
?? Unix文件系統(tǒng)是目錄和文件組成的一種層次結(jié)構(gòu),目錄的起點(diǎn)稱為根(root) 使用./符號(hào)表示,目錄(directory)是一個(gè)包含許多目錄項(xiàng)的文件,邏輯上講,可以認(rèn)為i每一個(gè)目錄都包含一個(gè)文件名,同時(shí)還包括文件的屬性信息。文件的屬性是指文件類型,文件大小,文件所有者,文件權(quán)限 以及文件最后修改時(shí)間。
文件名:目錄中各個(gè)名字稱為文件名,斜線和空操作符不能出現(xiàn)在文件名中,在創(chuàng)建新的目錄時(shí)候,系統(tǒng)會(huì)自動(dòng)創(chuàng)建2個(gè)文件名 .和..
路徑名:一個(gè)或多個(gè)以斜線分割的文件名序列構(gòu)成路徑名,以斜線開頭的稱為絕對路徑,否則稱為相對路徑
18 #include <dirent.h>19 int main(int argc,char** argv)20 { 21 DIR *dp;22 struct dirent *dirp;23 if(argc != 2)24 {25 err_quit("usage:is directory_name");26 }27 if(dp = opendir(argv[1] == NULL)28 err_sys("can`t open %s ",argv[1]);29 while((dirp = readdir(dp))!= NULL)30 printf("%s\n",dirp->d_namlen);31 32 closedir(dp);33 exit(0);34 }?
工作目錄:
? Unix下每一個(gè)進(jìn)程都有一個(gè)工作目錄,或者可以稱為當(dāng)前工作目錄,所有的相對路徑都是從工作目錄開始的。
輸入和輸出
??? 標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò),所有的shell都會(huì)為每一個(gè)新運(yùn)行的進(jìn)程打開三個(gè)文件描述,大多數(shù)shell都提供一種方式,使其中任何一個(gè)或者三個(gè),例如:ls -> file.list 執(zhí)行命令后,標(biāo)準(zhǔn)輸出重新定向到file.list中
不用緩存的IO
函數(shù)open,read,write,lseek以及close提供不用緩存的I/O,這些都使用文件描述
?
#define BUFFSIZE 409622 23 int main(void)24 { 25 int n;26 char buf[BUFFSIZE];27 while(n = read(STDOUT_FILENO,buf,BUFFSIZE) >0)28 { 29 if(write(STDIN_FILENO,buf,n) != n)30 { 31 err_sys("write err\n");32 }33 if(n < 0)34 { 35 err_sys("read_err\n");36 }37 exit(0);?標(biāo)準(zhǔn)I/O
?? 標(biāo)準(zhǔn)I/O函數(shù)體on個(gè)一種對不用緩沖的額函數(shù)的帶緩沖的接口,使用標(biāo)準(zhǔn)I/O函數(shù)可以無需擔(dān)心如何選取最佳的緩沖區(qū)大小,使用標(biāo)準(zhǔn)I/O函數(shù)的另外一個(gè)優(yōu)點(diǎn)是簡化了對輸入行的處理,如Fgets函數(shù)讀取完整的一行,而read函數(shù)讀取指定的字節(jié),標(biāo)準(zhǔn)I/O函數(shù)庫提供了使我們能夠控制該庫所使用的緩沖風(fēng)格函數(shù)。
??
18 #include <stdio.h>19 int main(void)20 { 21 int c;22 while(c =getc(stdin) != EOF)23 { 24 if(putc(c,stdout) == EOF)25 err_sys("output error");26 if(ferror(stdin))27 err_sys("input error");28 eixt(0);29 } 30 }?函數(shù)getc一次讀取一個(gè)字符,然后函數(shù)putc將此字符標(biāo)準(zhǔn)輸出
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/gaowenbin/archive/2012/04/26/2471516.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的unix高级环境编程-基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RoseHA集群:RHEL+RoseMi
- 下一篇: 各种***方式说明