第二周 第三周 课下实践补交

一、题目

0. 每个*.c一个文件,每个*.h一个文件,文件名中最好有自己的学号

1. 用Vi输入图中代码,并用gcc编译通过

2.  在Vi中使用K查找printf的帮助文档

3.   提交vi编辑过程截图,要全屏,包含自己的学号信息

 

答案:

1、

 

 

2、

 

3、

 

 

二、题目

1. gcc 进行预处理,编译,汇编,链接vi输入的代码
2.  生成的可执行文件中要有自己的学号
3.  提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

 

答案:

1、

 

 

2、

 

3、

 

 

三、

1. gcc -g编译vi输入的代码 

2. main函数中设置一个行断点 

3. main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点 

4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息 

答案:

1、

 

2、

 

 

 

3、

 

 

四、题目

复习c文件处理内容
编写myod.c myod XXX实现Linux下od -tx -tc XXX的功能
3. main与其他分开,制作静态库和动态库
4. 编写Makefile

答案:

2、

od的功能:

od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。

选项-t:指定输出格式,格式包括a、c、d、f、o、u和x。

参数x[SIZE]:十六进制,SIZE字节为单位以十六进制输出。

od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)

程序如下:

 

执行结果:

 

 

五、题目

1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a? 

2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息 

 

答案:

1、

 

2、

 

 

六、题目

1.  除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?

2.  提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

 

答案:

 

 

七、题目:

写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以

提交Make过程截图,要全屏,包含自己的学号信息 

答案:

1、

testmymath: main.o add.o sub.o mul.o div.o

gcc main.o add.o sub.o mul.o div.o -o testmymath

main.o: main.c head.h

gcc -c main.c

add.o: add.c head.h

gcc -c add.c

sub.o: sub.c head.h

gcc -c sub.c

mul.o: mul.c head.h

gcc -c mul.c

div.o: div.c head.h

gcc -c div.c

2、

 

 

八、题目

1 参考教材第十章内容
Linux IO相关系统调用编写myod.c myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
3. 不要把代码都写入main函数中
4. 要分模块,不要把代码都写入一个.c中
5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
6 课上上传代码到码云

 

答案:

1、

 

2、伪代码

int main(传入文件信息){

    打开文件

    输出文件长度转为数字

    for(循环到文件尾){

        do{

            输出文件内容

            有换行则跳出

        }while(文件结束)

    }

    关闭文件

}

3、

#include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

int main(int argc,char*argv[])

{

    FILE *fp=fopen(argv[2],"r");

    int i,j;

    char ch;

    j=atoi(argv[1]);

    for(i=0;i<j;i++)

    {

        do{ ch=fgetc(fp);

            putchar(ch);

                        if(ch == '\n') break;

        }while(ch!=EOF);

        

    }

    fclose(fp);

}

 

九、题目

使用fork,exec,wait实现mybash - 写出伪代码,产品代码和测试代码 - 发表知识理解,实现过程和问题解决的博客

 

答案:

 

 

 

 

伪代码

int main(){

 

从终端读取要执行的命令

fork()产生子进程执行此命令

如果exec函数返回,表明没有正常执行命令,打印错误信息perro()

父进程, 等待子进程结束,并打印子进程的返回值wait(&rtn)

 

}

 

 

产品代码

#include <errno.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <limits.h>

 

void main()

{

        

    char *command[3];

    command[0] = "ls";

    command[1] = "-l";

    command[2] = 0;

        

        int s,i=0;

        int rtn;

        printf( ">" );

    //printf("%s %s %s",command[1],command[2],command[3]);  

    printf("%s",command[0]);

    i=0;    

    s=fork();

    if ( s== 0 ) {

    //printf("%d\n",s);

    execvp( command[0], command );

    

    //perror( command );

    

    exit( errno );

     }

     else {

    

    //printf("%d\n",s);

 

    wait ( &rtn );

    

    printf( " child process return %d\n", rtn );

    

    }

    

    

}

 

posted on 2018-01-07 22:37  愤怒的小鸟哭了  阅读(195)  评论(0编辑  收藏  举报