unix系统程序设计

unix系统程序设计

ID:14401995

大小:156.00 KB

页数:31页

时间:2018-07-28

unix系统程序设计_第1页
unix系统程序设计_第2页
unix系统程序设计_第3页
unix系统程序设计_第4页
unix系统程序设计_第5页
资源描述:

《unix系统程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、写在前面的话。这是去年夏天刚来SOHU的时候写的。在本版最初好像发过一遍。现在整理个人文集,重发一遍。大家见谅。说明:本文所有程序,应在UNIX类操作系统下编译执行。第一章:生成一个Process(进程)进程是什么?简单地说,进程就是在执行状态下的一个程序(包括CPU状态,所占内存的状态,等等)A进程生成了B进程,也就是说,A程序在执行的时候,又生成了另一个进程B。这个时候,我们可以把A进程叫做父进程,把B进程叫做子进程。例程序://Usage:./a.out20#includeintmain(intargc,char*argv[]){intdep_time;d

2、ep_time=atoi(argv[1])*60;//将参数中给出的20(分钟)转换成整型的秒数if(fork()==0)//生成子进程,然后父进程中止{sleep(dep_time);fprintf(stderr,!!!!!!!!);}return0;}上面的程序是一个闹钟程序。当你执行之后。程序不会显示什么,而是一下就回到UNIX的提示符下。但是你在命令行中指定了20分钟后你有事,那么在你执行这个程序之后20分钟,他会提醒你到时间了。本程序只是做示例用,没有检查参数是否正确,等等。生成一个新的进程,可以使用fork()函数。以下说说fork()函数。头文

3、件:#include形式pid_tfork();参数无返回值成功时:父进程中:子进程的PID(ProcessID)子进程中:0失败时:父进程中:-1由于失败,没有生成子进程;fork()刚执行完的时候,子进程和父进程是完全一模一样的两份进程(当然,PID是不一样的)。他们的各个变量的值都是一样的,而且都认为自己已经执行完fork()了。fork()后,区分父进程和子进程,只要看fork()的返回值就行了。if(fork()==0)printf(这是子进程);elseprintf(这是父进程);同理:if(fork()==0){//接下来要子进程做的工作}else

4、{//接下来要父进程做的工作}一般,我们会把fork()返回给父进程的值保存下来(其实就是子进程的PID),等到需要结束子进程的时候,我们关掉他,如下:pid_tchild_pid;child_pid=fork();if(child_pid==0){//......}else{//......}//......需要结束子进程的时候kill(child_pid,SIGKILL)//kill()函数是用来发给另一个进程一个消息的。以后再讲。先写这些,试试手。喜欢就顶。要是没人爱看我就不写了。呵呵。省得大家说我乱贴垃圾。以后计划贴的东西:在程序中执行UNIX命令或者另

5、一个程序取得环境变量并利用UNIX文件系统(在程序中取得分区信息,等等)使用管道操作达到在各进程互相交流数据信号(signal)进程间共享内存用message实现进程间共享信息本文所有程序均应在UNIX系操作系统下编译执行。第二章:在程序中执行UNIX命令或者其它程序在UNIX下,像DOS的command.com那样的程序,我们称之为外壳(shell)。外壳就是一个命令解释器,你在外壳的提示符下输入命令(如同DOS的提示符一样),系统便会执行。DOS的提示符一般是C:>,当然,你想改成什么样就能改成什么样,又当然,像BBS一样贴张图上去是不太现实的。UNIX的

6、提示符根据外壳的不同是不同的。为了更好地说明本章想讲解的内容,我们先做一个外壳试试(玩具级别的)。我们给他起名叫SSH(SohuShell)吧。想取名叫CSH,可惜CSH在没生我之前就有了。呵呵。/*简单的外壳程序*/#includeintmain(){staticcharprompt[64]=>;charcommand[256];intst;fprintf(stderr,%s,prompt);//在屏幕上输出提示符while(gets(command)!=NULL)//取得命令{if(fork()==0)//生成子进程{//这里是子进程接下来要做的事if(ex

7、ecl(command,command,(char*)0)==(-1))//上一句是执行命令exit(1);//当出错时子进程异常中止}else{//父进程wait(&st);//等待子进程结束fprintf(stderr,%s,prompt);//输出提示符,等待命令}}return0;}执行方法:%./ssh>/bin/ls当前目录下文件名一览>Ctrl+D%普通的外壳在执行exit命令后会关闭。也就是说,退出一层外壳。咱们这个程序现在还做不到。愿意的话加上这个功能试试好了。所以要关闭这个外壳就得来点狠的。Ctrl+D,Ctrl+C什么的。再不你就再开一个外

8、壳然后ps-ef再kil

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。