unix高级环境编程-基础知识
對于一個從C#轉向Linux/unix系統開發的菜鳥,中間無數次的焦頭爛額只有自己心理明白,所幸我沒有在大風大浪中凋零破碎,依然堅挺著我的學習之路。
Unix操作系統結構:
UNIX ,是一個強大的多用戶、多任務操作系統,支持多種處理器架構,按照操作系統的分類,屬于分時操作系統,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的貝爾實驗室開發。
?? 嚴格意義上講,可將操作系統定義為一種軟件,可以直接控制硬件資源,提供程序運行環境,我們可以稱之為內核。內核的接口可以稱為系統調用,公用函數庫建立在系統調用之上,應用軟件既可以使用公用函數庫也可以使用系統調用。shell是一種特殊的應用程序,它為運行其他應用程序提供接口。
?? 廣義上講,操作系統也包括內核和其他的一些軟件。
文件系統和目錄
文件系統:
?? Unix文件系統是目錄和文件組成的一種層次結構,目錄的起點稱為根(root) 使用./符號表示,目錄(directory)是一個包含許多目錄項的文件,邏輯上講,可以認為i每一個目錄都包含一個文件名,同時還包括文件的屬性信息。文件的屬性是指文件類型,文件大小,文件所有者,文件權限 以及文件最后修改時間。
文件名:目錄中各個名字稱為文件名,斜線和空操作符不能出現在文件名中,在創建新的目錄時候,系統會自動創建2個文件名 .和..
路徑名:一個或多個以斜線分割的文件名序列構成路徑名,以斜線開頭的稱為絕對路徑,否則稱為相對路徑
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下每一個進程都有一個工作目錄,或者可以稱為當前工作目錄,所有的相對路徑都是從工作目錄開始的。
輸入和輸出
??? 標準輸入,標準輸出和標準出錯,所有的shell都會為每一個新運行的進程打開三個文件描述,大多數shell都提供一種方式,使其中任何一個或者三個,例如:ls -> file.list 執行命令后,標準輸出重新定向到file.list中
不用緩存的IO
函數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);?標準I/O
?? 標準I/O函數體on個一種對不用緩沖的額函數的帶緩沖的接口,使用標準I/O函數可以無需擔心如何選取最佳的緩沖區大小,使用標準I/O函數的另外一個優點是簡化了對輸入行的處理,如Fgets函數讀取完整的一行,而read函數讀取指定的字節,標準I/O函數庫提供了使我們能夠控制該庫所使用的緩沖風格函數。
??
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 }?函數getc一次讀取一個字符,然后函數putc將此字符標準輸出
?
?
轉載于:https://www.cnblogs.com/gaowenbin/archive/2012/04/26/2471516.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的unix高级环境编程-基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RoseHA集群:RHEL+RoseMi
- 下一篇: 各种***方式说明