20135220谈愈敏--信息安全系统设计基础第十周学习总结

argv

argv文件夹中的主要程序是argtest.c

#include <stdio.h>
#include <stdlib.h>
#include "argv.h"//包含了makeargv.c和freemakeargv.c

int main(int argc, char *argv[]) {
   char delim[] = " \t";
   int i;
   char **myargv;
   int numtokens;

   if (argc != 2) {//如果输入的命令字符个数不等于2
  fprintf(stderr, "Usage: %s string\n", argv[0]);//输出
  return 1;
   }   
   if ((numtokens = makeargv(argv[1], delim, &myargv)) == -1) {
  fprintf(stderr, "Failed to construct an argument array for %s\n", argv[1]);
  return 1;
   } 
   printf("The argument array contains:\n");
   for (i = 0; i < numtokens; i++)
  printf("%d:%s\n", i, myargv[i]);

   execvp(myargv[0], myargv);

   return 0;
}

采取了两种运行方法,第一种是用-c将所有.c的文件编译成后缀为.o的文件,然后一起编译成可执行文件。第二种方法我尝试直接将这些所有.c的文件编译成可执行文件,运行结果是一样的,如图是Usage: 命令字符 string

env

environ.c显示PATH环境变量

environvar.c

fifo

生产者和消费者问题

exec

如果执行成功则函数不会返回,执行失败则直接返回-1,打印出“* * * ls is done. bye”,失败原因存于errno中。

exec1/exec2运行结果一样,exec3只是将月份用英文输出。执行的是ls -l命令。

forkdemo

forkdemo1

先是打印进程pid,然后调用fork函数生成子进程,休眠一秒后再次打印进程id,这时父进程打印子进程pid,子进程返回0.

forkdemo2

两次fork()共产生3个子进程,加上父进程总共有4个进程。

forkdemo3

fork产生子进程,父进程返回子进程pid,不为0,所以输出父进程的那句话,子进程返回0,所以会输出子进程那句话。

forkdemo4

先打印进程pid,然后fork创建子进程,父进程返回子进程pid,所以输出parent一句,休眠十秒;子进程返回0,所以输出child与之后一句。

forkgdb

子进程与父进程并发运行,父进程打印是先打印两句,然后休眠一秒,然后打印一句,子进程先打印一句,然后休眠一秒,然后打印两句。

psh

psh1

输入字符串并将其当做命令执行

psh2

对上一个程序的完善:不断产生新的子进程输入字符串命令并执行。

testbuf

testbuf1

testbuf2

这两个程序类似,fflush(stdout)相当于换行

都是先输出hello,然后换行。之后不退出。

testbuf3

在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出。

testpid

获取当前进程pid和当前进程父进程pid

testpp

二维数组越界申请空间。

将代码改为

pp=malloc(20);

即可编译成功。

testsystem

运行时在./testsystem后面加指令会执行相应指令。

system()——执行shell命令,也就是向dos发送一条指令。这里是后面可以跟两个参数,然后向dos发送这两个命令,分别执行。如下图,输入ls和dir两个指令后,可以看到分别执行了。

waitdemo

posted on 2015-11-29 20:57  20135220谈愈敏  阅读(285)  评论(0编辑  收藏  举报