linux系統程式設計課堂筆記
1(20121013)
一、 每個應用程式是獨享的:
1.對於32
位的cpu
來說,應用程式程式設計和核心共占有
4g的空間:
應用層是0-3g
,核心層是
3g-4g;
2.每個程式是獨享的:
每個程式都有3g
的空間來進行使用,這個空間是虛擬記憶體,在實際的呼叫的時候,每個應用程式對映到不同的物理記憶體。
例如:a.out
和b.out
都對位址
0x1000
進行操作,實際上是可以的,物理記憶體上是不同的。
二、system call(系統呼叫):
從fopen
解釋:
開啟檔案,需要對核心進行呼叫,例如,檔案系統識別(ext4等)
,硬碟驅動等程式來進行操作。這樣子就很複雜,於是,
kernel
和被分開,有明確的界限,中間是
posix
或者其他的呼叫介面;
kernel/作業系統給上層的應用提供簡單的應用介面,(例如
fopen
等,應用(
ls cd
等都是應用)。
)作業系統遮蔽了硬體驅動或者是程序排程等,所以上層應用不用考慮硬體細節。
作業系統提供給應用層為system call
(系統呼叫)
注意:系統呼叫函式和c
語言標準庫的區別;
例如:檔案操作:
c語言標準庫
檔案操作
fopen,fclose,fread,fwrite,fseek;
有io緩衝,**已經優化,效率高,例如合併了一些操作使對核心的訪問減少。例如
printf().
有時候需要重新整理
(\n可以重新整理
)才能列印
系統介面
posix標準
檔案操作;
open close read write lseek
io緩衝,沒有優化,訪問核心次數多,更貼近核心呼叫。
三、系統io/
操作:
1.檔案的操作
open read write lseek close
例如:int open(const char *pathname,int flags
,mode_t mode)
return:返回值為整形,是檔案描述符
(file descriptor),
預設有0(
標準輸入),
1(標準輸出),
2(標準錯誤).
如果有乙個開啟,則從3
開始分配,
3,4,5,6
……,如果
3被刪除,則優先分配3。
其中flags
的示例如下:
o_creat:和讀寫配合操作,進行檔案建立,如果有,則開啟;
o_excl:和
o_creat
配合使用,如果有,返回錯誤;
o_trunc:和
o_creat
配合使用,如果有,清除原檔案內的內容。
進行檔案的操作,不管是c
庫還是系統呼叫介面,都是對檔案指標的操作,這個是一樣的。
2.資料夾的操作:dir
dir *opendir(const char *name(資料夾名));
struct dirent *readdir(dir *dirp);
關鍵是這個結構體的解析。。
struct dirent
buf.成員進行呼叫。
struct stat {
dev_t st_dev; /* id of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user id of owner */
gid_t st_gid; /* group id of owner */
dev_t st_rdev; /* device id (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system i/o */
blkcnt_t st_blocks; /* number of 512b blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
time_t:可以用
ctime
進行解析。。
軟鏈結和硬鏈結:
(soft link
和hard link)
內容軟鏈結soft link
硬鏈結hard link 表示
ll屬性裡沒有
ll屬性裡有硬鏈結數
跟蹤路徑,屬於路徑繫結,如果鏈結或原始檔移動,則鏈結失效,原始檔修改檔名,鏈結失效
檔案系統層次繫結,兩個檔案沒有主次之分,移動或刪除其中乙個檔案,或者是重新命名,任何乙個檔案繼續有效
可以跨分割槽鏈結
不可以跨分割槽鏈結
chdir :改變操作的資料夾的路徑。。很有用。。
四、err_no:
錯誤碼是乙個全域性變數,程序和程序之間是獨享的,只有乙個err_no;
perror();
五.環境變數:
path 等環境變數:
extern char **environ
--------------------------------------------end-----------20121013---------------------------------------------
UNIX系統程式設計1
man 你想查詢的內容 如果man你也不會用也不要緊,那你就 man man 一下,呵呵。只可惜好像還沒有翻譯成中文,對於像我這樣英文水平還有待提高的朋友來說讀起來有點麻煩。最後還有乙個好工具就是網路,有什麼不會的google一下好多問題都能解決。好,囉嗦的半天,說歸正傳,免得給大家造成光說不練的印...
《UNIX網路程式設計 卷1》 筆記 UNIX域協議
unix域協議並不是乙個實際的協議族,而是在單個主機上客戶程序和伺服器程序之間通訊的一種方法。unix域使用的套接字結構如下 struct sockaddr un int main int argc,char argv 執行結果如下 可以看到繫結的路徑名 tmp 123 現在是乙個套接字檔案。uni...
unix系統程式設計
popen pclose popen介面定義 include file popen const char command,const char type int pclose file stream popen函式會建立乙個管道,並且建立乙個子程序來執行shell,shell會建立乙個子程序來執行c...