预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共32页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

看原贴,回复请点击写在前面的话。这是去年夏天刚来SOHU的时候写的。在本版最初好像发过一遍。现在整理个人文集,重发一遍。大家见谅。说明:本文所有程序,应在UNIX类操作系统下编译执行。第一章:生成一个Process(进程)进程是什么?简单地说,进程就是在执行状态下的一个程序(包括CPU状态,所占内存的状态,等等)A进程生成了B进程,也就是说,A程序在执行的时候,又生成了另一个进程B。这个时候,我们可以把A进程叫做父进程,把B进程叫做子进程。例程序://Usage:./a.out20#includeintmain(intargc,char*argv[]){intdep_time;dep_time=atoi(argv[1])*60;//将参数中给出的20(分钟)转换成整型的秒数if(fork()==0)//生成子进程,然后父进程中止{sleep(dep_time);fprintf(stderr,!!!!!!!!\n);}return0;}上面的程序是一个闹钟程序。当你执行之后。程序不会显示什么,而是一下就回到UNIX的提示符下。但是你在命令行中指定了20分钟后你有事,那么在你执行这个程序之后20分钟,他会提醒你到时间了。本程序只是做示例用,没有检查参数是否正确,等等。生成一个新的进程,可以使用fork()函数。以下说说fork()函数。头文件:#include形式pid_tfork();参数无返回值成功时:父进程中:子进程的PID(ProcessID)子进程中:0失败时:父进程中:-1由于失败,没有生成子进程;fork()刚执行完的时候,子进程和父进程是完全一模一样的两份进程(当然,PID是不一样的)。他们的各个变量的值都是一样的,而且都认为自己已经执行完fork()了。fork()后,区分父进程和子进程,只要看fork()的返回值就行了。if(fork()==0)printf(这是子进程);elseprintf(这是父进程);同理:if(fork()==0){//接下来要子进程做的工作}else{//接下来要父进程做的工作}一般,我们会把fork()返回给父进程的值保存下来(其实就是子进程的PID),等到需要结束子进程的时候,我们关掉他,如下:pid_tchild_pid;child_pid=fork();if(child_pid==0){//......}else{//......}//......需要结束子进程的时候kill(child_pid,SIGKILL)//kill()函数是用来发给另一个进程一个消息的。以后再讲。先写这些,试试手。喜欢就顶。要是没人爱看我就不写了。呵呵。省得大家说我乱贴垃圾。以后计划贴的东西:在程序中执行UNIX命令或者另一个程序取得环境变量并利用UNIX文件系统(在程序中取得分区信息,等等)使用管道操作达到在各进程互相交流数据信号(signal)进程间共享内存用message实现进程间共享信息看原贴,回复请点击本文所有程序均应在UNIX系操作系统下编译执行。第二章:在程序中执行UNIX命令或者其它程序在UNIX下,像DOS的command.com那样的程序,我们称之为外壳(shell)。外壳就是一个命令解释器,你在外壳的提示符下输入命令(如同DOS的提示符一样),系统便会执行。DOS的提示符一般是C:\>,当然,你想改成什么样就能改成什么样,又当然,像BBS一样贴张图上去是不太现实的。UNIX的提示符根据外壳的不同是不同的。为了更好地说明本章想讲解的内容,我们先做一个外壳试试(玩具级别的)。我们给他起名叫SSH(SohuShell)吧。想取名叫CSH,可惜CSH在没生我之前就有了。呵呵。/*简单的外壳程序*/#includeintmain(){staticcharprompt[64]=>;charcommand[256];intst;fprintf(stderr,%s,prompt);//在屏幕上输出提示符while(gets(command)!=NULL)//取得命令{if(fork()==0)//生成子进程{//这里是子进程接下来要做的事if(execl(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什么的。再不你