unix环境下的C++编程.pdf
《unix环境下的C++编程.pdf》由会员分享,可在线阅读,更多相关《unix环境下的C++编程.pdf(163页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Unix 环境下的环境下的c+编程编程Unix c+programmingday01课程内容课程内容?Unix 操作系统简介操作系统简介?操作用户环境操作用户环境?进程概念进程概念?用户登录信息用户登录信息?文件系统文件系统Unix操作系统简介操作系统简介?Unix 系统介绍系统介绍?操作系统概念操作系统概念?Unix操作系统操作系统 Unix标准标准 ANSI C,1989 IEEE POSIX,1003.1-1988,1993 X/OPEN XPG3/1989 FIPS(Federal Information Processing Standard)Unix实现实现 SVR4,BSD4.3
2、使用使用Unix系统系统?用户登录用户登录?户名,密码,主路径,当前路径户名,密码,主路径,当前路径?环境变量环境变量?用户权限用户权限?组,用户id,组id组,用户id,组id?ShellShell?用户属性文件用户属性文件使用使用Unix系统系统?常用的(重要)UNIX命令常用的(重要)UNIX命令?cd,ls,mkdir,pwd,id,who,cp,rm,cat,chown,chmod,ln,find,which,what,touch,?vi的用法的用法Unix环境与环境变量环境与环境变量?关于环境变量关于环境变量?env命令env命令新的新的main()函数函数?从main函数中获得环
3、境变量从main函数中获得环境变量int main(int argc,char*argv,char*envp);了解你的操作系统了解你的操作系统?试运行程序conf.cc,了解系统配置试运行程序conf.cc,了解系统配置#include using namespace std;main(int argc,char*argv,char*env)while(env&*env)cout *env endl;+env;在程序中使用环境变量在程序中使用环境变量?在程序中操作环境变量在程序中操作环境变量#include char*getenv(const char*name);return value
4、for environment nameint putenv(const char*str);change or add value to environment环境变量程序环境变量程序myenv.cc#include#include using namespace std;int main()char*env=“USER_HOME”;putenv(USER_HOME=/users/openlab);char*a=getenv(env);if(a!=NULL)coutenv:aendl;return 0;程序与进程程序与进程?Program=程序程序?Process=进程Process=进程?
5、进程的运行状态进程的运行状态?ps,prstat?进程状态的切换进程状态的切换 Ctrl-Z,bg Command&bg,fg stop pid进程号,进程号,process id?编译并运行程序hello.cc编译并运行程序hello.cc#include#include using namespace std;int main()cout “Hello world!”endl;pause();?将该进程切换到后台,查看它的进程号将该进程切换到后台,查看它的进程号用户信息操作函数用户信息操作函数?用户相关信息:#includechar*getlogin();/*得到用户登陆名得到用户登陆名*
6、/int getuid();/*得到当前登陆用户的用户得到当前登陆用户的用户ID号号*/int geteuid();/*得到当前运行该进程的有效用户得到当前运行该进程的有效用户ID*/struct passwd*getpwuid(int userid);/*得到一个指向得到一个指向passwd结构的指针,该结构中包括结构的指针,该结构中包括用户相关信息记录。用户相关信息记录。*/用户组信息操作函数用户组信息操作函数?用户相关信息:#includeint getgid();/*得到当前登陆用户组的得到当前登陆用户组的ID号号*/int getegid();/*得到当前运行该进程的有效用户组得到当
7、前运行该进程的有效用户组ID*/struct group*getgrgid(int groupid);/*得到一个指向得到一个指向group结构的指针,该结构中包括用户组相关信息记录。结构的指针,该结构中包括用户组相关信息记录。*/UNIX的文件系统的文件系统?File and directory?Hierarchical arrangement?File name?Path?Absolute path?Relative pathUNIX的目录的目录?Working directory#include char*getcwd(char*buf,size_t size);?Home direct
8、oryLs命令命令?寻求帮助寻求帮助?man lsman ls?试运行ls命令试运行ls命令关于目录关于目录?分别使用帮助命令,查看下列系统调用分别使用帮助命令,查看下列系统调用?#include?#include?DIR*opendir(const char*dirname)/open directory?struct dirent*readdir(DIR*dirp)/read directory?int closedir(DIR*dirp)/close a directory stream文件与文件描述符文件与文件描述符?文件文件?针对用户,文件名针对用户,文件名?针对进程,文件描述符针对
9、进程,文件描述符?文件描述符文件描述符文件在内核的数据结构文件在内核的数据结构?进程表进程表?文件表文件表?V节点表V节点表fd标志fd标志0 01 12 23 34 4文件状态标志文件状态标志当前位移量当前位移量V节点指针V节点指针V节点信息V节点信息I节点信息I节点信息当前文件长度当前文件长度文件状态标志文件状态标志当前位移量当前位移量V节点指针V节点指针V节点信息V节点信息I节点信息I节点信息当前文件长度当前文件长度文件文件I/O?文件描述符文件描述符?由系统内核产生由系统内核产生?非负整数非负整数?Shell产生三个标准文件描述符Shell产生三个标准文件描述符(0,1,2)对应于()
10、对应于(cin,cout,cerr)?I/O的缓存模式的缓存模式:?行缓存 全缓存 不缓存行缓存 全缓存 不缓存?I/O操作操作:?open,read,write,lseek,close?System kernel buffed in queueOpen函数函数?打开一个文件打开一个文件#include#include#include int open(const char*pathname,int oflag,);O_APPEND O_CREAT O_EXCL?返回文件描述符fd返回文件描述符fd进程使用文件描述符来操作文件进程使用文件描述符来操作文件Open函数的例子函数的例子int fd
11、=open(“test.txt”,O_CREAT|O_WRONLY,0700);O_CREAT 创建创建O_WRONLY 只写只写O_RDONLY 只读只读O_RDWR读写读写0700 UMASK屏蔽字屏蔽字Read/Write function#include size_t read(int fd,void*buf,size_t nbytes);如果函数执行成功,如果函数执行成功,read返回一个非负整数,表示本次读取操作实际读入的字节数,该数值应小于等于返回一个非负整数,表示本次读取操作实际读入的字节数,该数值应小于等于nbytes参数,失败返回参数,失败返回-1size_t write(
12、int fd,void*buf,size_t nbytes);如果函数执行成功,如果函数执行成功,write函数返回一个非负整数,表示本次函数调用实际写出的字节数,该数字应小于等于函数返回一个非负整数,表示本次函数调用实际写出的字节数,该数字应小于等于nbytes参数,失败返回参数,失败返回-1Lseek function#include#include off_t lseek(int fd,off_t offset,int whence);SEEK_SET the pointer is set to offset bytesSEEK_CUR the pointer is set to its
13、 current location plus offsetSEEK_END the pointer is set to the size of the file plus offset文件共享文件共享?UNIX容许不同进程间共享文件描述符容许不同进程间共享文件描述符?不同进程可能同时操作同一个文件不同进程可能同时操作同一个文件?文件共享易出现的问题文件共享易出现的问题?元操作元操作?O_APPEND?O_CREAT|O_EXCL文件属性文件属性?关于stat结构关于stat结构struct stat mode_t st_mode;/File modenlink_t st_nlink;/Link
14、ersuid_t st_uid;/User/Owner IDgid_t st_gid;/Group id off_t st_size;/File sizetime_t st_atime;/Last access timestamptime_t st_mtime;/Last modified timestamptime_t st_ctime;/create timestamp.;文件类型的判别文件类型的判别?Stat结构的st_mode值Stat结构的st_mode值?文件类型的判别宏文件类型的判别宏?S_ISREG()测试是否为普通文件测试是否为普通文件?S_ISDIR()测试是否为目录文件测
15、试是否为目录文件?S_ISCHR()测试是否为字符特殊文件测试是否为字符特殊文件?S_ISBLK()测试是否为块特殊文件测试是否为块特殊文件?S_ISFIFO()测试是否为FIFO管道文件测试是否为FIFO管道文件?S_ISLNK()测试是否为链接文件测试是否为链接文件?S_ISSOCK()测试是否为socket文件测试是否为socket文件文件属主与权限文件属主与权限?文件属主文件属主?文件的存取权限文件的存取权限?stat.st_mode?S_IRUSR|S_IWUSR|S_IXUSR?S_IRGRP|S_IWGRP|S_IXGRP?S_IROTH|S_IWOTH|S_IXOTH?文件权限
16、的判别文件权限的判别?access(const char*path,int amode)函数(const char*path,int amode)函数amode:R_OK,W_OK,X_OK,F_OKamode:R_OK,W_OK,X_OK,F_OKExercises?Group_info.cc根据用户的组根据用户的组id,打印用户组的名称和所有组成员。打印用户组的名称和所有组成员。?My_ls.cc写一个程序,其功能与系统命令写一个程序,其功能与系统命令ls l 相同。相同。?思考,用户思考,用户ID 与有效用户与有效用户ID 之间的区别。之间的区别。Q&AUnix c+programmin
17、gday02课程内容课程内容?系统标识系统标识?时间与日期时间与日期?多进程编程多进程编程系统标识符系统标识符?获得有关的系统信息获得有关的系统信息?获得系统的名称获得系统的名称#include int uname(struct utsname*name)#include int gethostname(char*name,int namelen);Return:upon successful completion,gethostname()and sethostname()return 0.Otherwise,they return-1 and set errno to indicate t
18、he error.程序程序sysinfo.cc#include#include main()char host256;if(gethostname(host,255)=0)cout Host name:host endl;struct utsname sysinfo;if(uname(&sysinfo)!=-1)cout System name:sysinfo.sysname endl;cout Node name:sysinfo.nodename endl;cout Release:sysinfo.release endl;cout Version:sysinfo.version endl;
19、cout machine:sysinfo.machine endl;时间与日期函数时间与日期函数?UNIX系统的记时方法系统的记时方法?Broken down timestruct tm;?其他与时间有关的函数其他与时间有关的函数?ctime,asctime,strftime,gmtime,localtime#include time_t time(time_t*mem);时间函数的关系与转换时间函数的关系与转换System kerneltime_ttimestruct tmgmtimelocaltimemktimestringFormated stringasctimectimestrfti
20、meUNIX的登录会计文件的登录会计文件?utmp文件文件?/var/adm/utmpx?记录当前登陆的各个用户记录当前登陆的各个用户?wtmp文件文件?/var/adm/wtmpx?跟踪所有登陆与登出事件跟踪所有登陆与登出事件?last命令命令?#include System函数函数#include int system(const char*string);?执行sting中所表示的命令执行sting中所表示的命令?将产生一个新的进程将产生一个新的进程?该进程结束后才返回该进程结束后才返回System函数的例子函数的例子#include#include using namespace st
21、d;int main()cout -Hello-endl;system(ls-l);cout The pwd:n;system(pwd);cout -Good Bye-endl;atexit()函数函数?登记登记exit handlers#include int atexit(void(*func)(void);?可以登记最多可以登记最多32个个exit handlers在进程退出时,最后登记的最先调用,最先登记的最后调用在进程退出时,最后登记的最先调用,最先登记的最后调用exit与与_exit函数函数?Exit status,pass to the parent process?Exit h
22、andlers#include void exit(int status);/正常保存退出正常保存退出#include void _exit(int status);/异常无条件退出异常无条件退出Unix 进 程进 程?进程是如何产生的进程是如何产生的main进程的入口函数,任何进程都要有进程的入口函数,任何进程都要有main函数。函数。exec 所有的进程都是通过 所有的进程都是通过exec函数调用产生的。函数调用产生的。?退出进程退出进程exit 正常终止,操作包括调用各终止处理程序(由正常终止,操作包括调用各终止处理程序(由atexit注册),然后关闭所有标准注册),然后关闭所有标准I/
23、O流等,之后调用流等,之后调用_exit。_exit 正常终止,系统调用,此函数由正常终止,系统调用,此函数由exit调用,处理调用,处理UNIX的特定细节。注意,此函数一旦调用将立即进入的特定细节。注意,此函数一旦调用将立即进入kernel。return from main()等效于调用 等效于调用exit函数。函数。abort 产生 产生SIGABRT信号。信号。killed 向进程或进程组发送信号。向进程或进程组发送信号。进程与系统进程与系统kernelexitexecmainC Startupfunctions_exit_exitExit handlerExit handlerStan
24、dardcleanup_exit程序程序bye.cc#include using namespace std;main()char str256;cout;cin.getline(str,256);while(strcmp(str,bye)system(str);cout;cin.getline(str,256);进程标识符进程标识符?进程,父进程,子进程进程,父进程,子进程?进程标识符进程标识符#include#include pid_t getpid();/当前进程号当前进程号pid_t getppid();/得到父进程号得到父进程号思考:父进程可以得到子进程吗?思考:父进程可以得到子进程
25、吗?fork函数函数?fork()函数介绍函数介绍the fork()functions create a new process.The new process(child process)is an exact copy of the calling process(parent process).The child process inherits the following attributes from the parent process;子进程和父进程继续执行子进程和父进程继续执行fork()之后的指令,子进程是父进程的复制品:例如子进程获得父进程数据空间,堆和栈的复制品;之后的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- unix 环境 C+ 编程
限制150内