zoukankan      html  css  js  c++  java
  • 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[] = " 	";
       int i;
       char **myargv;
       int numtokens;
    
       if (argc != 2) {//如果输入的命令字符个数不等于2
      fprintf(stderr, "Usage: %s string
    ", argv[0]);//输出
      return 1;
       }   
       if ((numtokens = makeargv(argv[1], delim, &myargv)) == -1) {
      fprintf(stderr, "Failed to construct an argument array for %s
    ", argv[1]);
      return 1;
       } 
       printf("The argument array contains:
    ");
       for (i = 0; i < numtokens; i++)
      printf("%d:%s
    ", 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

  • 相关阅读:
    9、spring五种scope
    2、数据库四种事务隔离级别
    4、jquery获取servlet值
    3、$.post不执行
    A brief Arch installation in VMware
    Git经验记录
    Windows上virtualenv搭建python开发环境
    no such file django-admin.py
    复制拷贝函数+重载operator=
    Reconfigure CentOS+freeradius+daloradius again
  • 原文地址:https://www.cnblogs.com/tymjava/p/5005422.html
Copyright © 2011-2022 走看看