資源描述:
《Linux操作系統(tǒng) 第7章 Linux環(huán)境編程.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第7章Linux環(huán)境編程主要內(nèi)容系統(tǒng)調(diào)用和庫函數(shù)簡介文件操作進(jìn)程管理和同步進(jìn)程通信內(nèi)存管理7.1系統(tǒng)調(diào)用和庫函數(shù)7.1.1系統(tǒng)調(diào)用系統(tǒng)調(diào)用是操作系統(tǒng)提供的、與用戶程序之間的接口,也就是操作系統(tǒng)提供給程序員的接口從感覺上系統(tǒng)調(diào)用類似于過程調(diào)用,都由程序代碼構(gòu)成,使用方式相同兩者有實質(zhì)差別:過程調(diào)用只能在用戶態(tài)下運(yùn)行,不能進(jìn)入核心態(tài);而系統(tǒng)調(diào)用可以實現(xiàn)從用戶態(tài)到核心態(tài)的轉(zhuǎn)變。系統(tǒng)調(diào)用可大致分為五個類別:進(jìn)程控制、文件管理、設(shè)備管理、信息維護(hù)和通信7.1.2庫函數(shù)它們本身并不屬于操作系統(tǒng)的內(nèi)核部分庫函數(shù)可以分為下面六大類:①文件管理②狀態(tài)信息③文件修改④程序設(shè)計語言的支持⑤程序裝入和執(zhí)行⑥通信7
2、.1.3調(diào)用方式例如,creat系統(tǒng)調(diào)用可以創(chuàng)建一個新文件,其函數(shù)原型說明如下:#include#include#includeintopen(constchar*path,intoflags);不同的系統(tǒng)調(diào)用所需要的頭文件(又稱前導(dǎo)文件)是不同的。7.2文件操作7.2.1有關(guān)文件操作的系統(tǒng)調(diào)用常用的有關(guān)文件操作的系統(tǒng)調(diào)用有:creat,open,close,read,write,lseek,link,unlink,mkdir,rmdir,chdir,chmod等例如:#include#inclu
3、de#includeintcreat(constchar*pathname,mode_tmode);#include#include#includeintopen(constchar*path,intoflags);intopen(constchar*path,intoflags,mode_tmode);7.2.2應(yīng)用示例/*rdwr.c-Thereadandwritesystemcalls*/#include#include#incl
4、ude#include#include#includeintmain(void){intfd1,fd2,fd3,nbytes;intflags=O_CREAT
5、O_TRUNC
6、O_WRONLY;charbuf[10];if((fd1=open("rdwr.c",O_RDONLY,0644))<0){perror("openrdwr.c");exit(EXIT_FAILURE);}if((fd2=open("/dev/null",O_WRONLY))<0){perror("open/dev/null");exit
7、(EXIT_FAILURE);}if((fd3=open("/tmp/foo.bar",flags,0644))<0){perror("open/tmp/foo.bar");close(fd1);close(fd2);exit(EXIT_FAILURE);}while((nbytes=read(fd1,buf,10))>0){if(write(fd2,buf,10)<0)perror("write/dev/null");if(write(fd3,buf,nbytes)<0)perror("write/tmp/foo.bar");write(STDOUT_FILENO,buf,10);}cl
8、ose(fd1);close(fd2);close(fd3);exit(EXIT_SUCCESS);}7.3進(jìn)程控制7.3.1有關(guān)進(jìn)程控制的系統(tǒng)調(diào)用常用的有關(guān)進(jìn)程控制的系統(tǒng)調(diào)用有:fork,exec,wait,exit,getpid,sleep,nice等例如:#include#includepid_tfork(void);#include#includepid_tgetpid(void);pid_tgetppid(void);7.3.2應(yīng)用示例/*proc1.c演示有關(guān)進(jìn)程操作*/#include
9、#include#include#includeintmain(intargc,char**argv){pid_tpid,old_ppid,new_ppid;pid_tchild,parent;parent=getpid();/*獲得本進(jìn)程的PID*/if((child=fork())<0){fprintf(stderr,"%s:forko