7月班C语言、linux基础、网络测试(答案).doc_第1页
7月班C语言、linux基础、网络测试(答案).doc_第2页
7月班C语言、linux基础、网络测试(答案).doc_第3页
7月班C语言、linux基础、网络测试(答案).doc_第4页
7月班C语言、linux基础、网络测试(答案).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 C语言部分C1 以下为WinNT下的32位C程序,请计算sizeof的值。char str = “Hello” ;char *p = str ;int n = 10;请计算sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4 void Func ( char str100)请计算 sizeof( str ) = 4 void *p = malloc( 100 );请计算sizeof ( p ) = 4 C2 有以下宏定义: #define a 7 + 3 #define b (2 + 1) #define dvx(x, y) (x * y) 试写出以下宏dvx(a,b)的结果? 7 + 3 * (2 + 1) = 16 C3 用变量a给出下面的定义1) 一个有10个指针的数组,该指针是指向一个整型数的int *a102) 一个指向有10个整型数数组的指针Int (*a)103) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数int (*foo)(int)4) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型int (*a10)(int)C4 不使用其他变量,交换两个整型a,b的值int a = 2,b =3;(1)a = a + b; b = a b;a = a b; (2)a = a bb = b aa = a bC5 有结构AA中间有cc域,比较这两种对cc引用的不同,并说明pp和qq各应如何定义:pp-cc,qq.ccstruct AAint a;int cc;*pp,qq;pp-cc是用指针的方法引用ccqq.cc使用变量的方法引用ccC6 头文件中的 ifndef/define/endif 干什么用?防止头文件重复被引用C7 #include 和 #include “filename.h” 有什么区别?答:对于#include ,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h,然后再去标准库路径搜索 filename.hC8 const 有什么用途?(请至少说明两种)(1)可以定义 const 只读变量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。C9 请举例说明字符串数组与字符串指针的差异 char name100 = “abcdefg” char *name = “abcdefg” 字符串数组是在栈中或静态数据存储区中分配存储单元,把整个字符串都放进去,可以任意读写 字符串指针,字符串存放在文字常量区,把字符串的首地址放在指针变量中,只能读,不能写。C10 已知一个函数原型:int foo(struct type_t1 a, struct type_t2 *b),请用typedef定义一个指向该原型函数的指针,并用这个新定义的类型声明一个元素个数为SIZE的指针数组int (*p) (struct type_t1 a, struct type_t2 *b)typedef int (*FOO) (struct type_t1 a, struct type_t2 *b)FOO a SIZE int ( *fooSIZE ) (struct type_t1 a, struct type_t2 *b)C11 写出程序删除链表中的所有接点voiddel_all(node*head) node*p;while(head!=NULL) p=head-next; free(head); head=p; cout释放空间成功!C12 请写一个函数,将字符串”123456”转换成变量123456。int str_to_num(char * str)char *temp = str;int num=0;while (*temp != 0)num = num * 10 + (*temp - 0);temp+;return num;C13 请实现将两个字符串合并的函数strcat.char *my_strcat(char *dest, const char* src)char *temp = dest;while (*dest != 0)dest+;while(*dest+ = *src+) != 0);return temp;Linux部分L1 各个文件夹的意义是什么? /bin /lib /etc /mnt /boot/bin 存放如ls ,mv,rm等常用的命令工具 /lib 在linux执行或编译一些程序的时候,均会用到的一些函数库。/etc 系统在开机过成中需要读取的文件均在这个目录中,例如用户的帐号与密码,系统的主要设定。/mnt这是软盘与光盘默认挂载的地方/boot 这里存放linux内核与开机相关文件的地方。L2 怎样在vi中查找一个字符串,请写出详细过程在编辑模式下(shift+:)用 /字符串/ 从光标开始处向文件尾部查找该字符串用 ?字符串 ? 从光标开始处向文件首查找该字符串。L3 怎样用gcc编译文件test.c,并加上调试信息?用gcc test.c o test gL4 用gcc编译文件test.c,要经过哪几个步骤?主要四个阶段 1:预处理阶段 2:编译成汇编代码 3:把汇编代码生成目标代码 4:用连接器把生成的目标代码和系统或用户提供的库连接起来生成可执行文件。L5 gcc的参数“-L”,“-l”“-I”分别是什么意义?举例说明。 - L 指定额外的函数库搜索路径 - 1 连接时搜索指定的函数库 - I 指定额外的头文件搜索路径。L6 在gdb中怎样设置一个断点?怎样清除一个断点?用break 文件行 设置断点 clear 文件行 清除断点L7 写一个简单的Makefile的例子,并对它进行解释,说明Makefile的语法规则。main: main.c main.hgcc o main main.cmain 是要产生的文件名称 main.c main.h是产生目标文件依赖的文件 gcc是执行的命令语法规则目标:依赖文件列表命令列表L8 什么是shell脚本?请写出你对shell脚本的理解。shell 脚本程序就是按照一定的语法结构把若干linux命令组织在一起,使这些命令按照我们的要求完成一定的功能,它可以进行类似程序的编写,并且不需要编译就能运行。它就相当于windows下的批处理省去一步步的命令操作。L9 什么是系统调用?请写出你对系统调用的理解。系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。L10 什么是标准I/O库?标准I/O库和系统调用有什么区别?系统级的I/O操作函数都是针对文件描述的,即打开文件时返回一个文件描述符,然后可以直接对文件描述符进行操作。系统调用运行内核态 I/O库函数运行与用户态。L11 函数read()和fread()有什么区别?fread的是标准IO,属于库函数,read是操作系统提供的系统调用。fread是带缓冲的,read不带缓冲. 包是一种特殊类型的组成部分L12 什么是进程?用fork()创建一个子进程时,系统会做什么工作?进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位不仅是系统内部独立运行的实体也是独立竞争资源的实体。用fork()时系统会分配子进程一个ID号 然后继承父进程的地址空间,包括进程上下文 进程堆栈 打开的文件描述符等等,他就是父进程的一个复制品。L13 什么是信号?请写出你对信号的理解。信号是软件中断,它提供了一种处理异步事件的方法,是进程间通信的方法。信号处理有三种方式 1:忽略此信号 2:用用户定义的信号处理函数处理该信号 3:执行系统默认的动作 可以用void(*signal(int signo,void (*func)(int)int)函数中的第二个参数func()函数来指定信号的处理方式,SIGIGN:忽略该信号 SIGDFL :采用默认方式处理该信号 自定义信号处理函数。L14 进程和线程有什么区别?每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。L15 什么是线程的互斥和同步,程序应怎样写才能达到互斥或同步?互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。在写程序时可以用互斥锁和信号量实现线程同步 ,一个线程访问共享资源时给这个资源上锁其他线程就不能访问了直到上锁的进程释放互斥锁为止。L16 编写一个多进程多线程的程序:要求创建4个子进程,每个进程都分别创建2个线程,进程和线程的功能不做要求,可只提供简单的打印语句。#include #include #include void *fun11(void *arg) printf(11);void *fun12(void *arg) printf(12);void *fun21(void *arg) printf(21);void *fun22(void *arg) printf(22);void *fun31(void *arg) printf(31);void *fun32(void *arg) printf(32);void *fun41(void *arg) printf(41);void *fun42(void *arg) printf(42);int main()pid_t pid1,pid2,pid3,pid4;pthread_t tid11,tid12,tid21,tid22,tid31,tid32,tid41,tid42;int status1,status2,status3,status4; if( (pid1=fork() = 0 )pthread_create(&tid11,NULL,fun11,NULL);pthread_create(&tid12,NULL,fun12,NULL);else if(pid10) sleep(1);if( ( pid2=fork() = 0 ) pthread_create(&tid21,NULL,fun21,NULL); pthread_create(&tid22,NULL,fun22,NULL); else if( pid2 0 ) sleep(1);if( ( pid3=fork()=0 ) pthread_create(&tid31,NULL,fun31,NULL); pthread_create(&tid32,NULL,fun32,NULL); else if( pid30 ) sleep(1)if( ( pid4=fork()=0 ) pthread_create(&tid41,NULL,fun41,NULL);pthread_create(&tid42,NULL,fun42,NULL); else if( pid40) sleep(1);wait( &status1 ); wait( &status2 ); wait( &status3 ); wait( &status4 ); return 0;L17 编制一段程序,实现进程的管道通信: 使用系统调用pipe()建立一条管道线,两个子进程分别向管道各写一句话: Child process 1 is sending a message!Child process 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求:父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 #include #include #include #include int main(int argc, char *argv)int fd2;pid_t pid;pid_t pid_sec;char buf7;pipe(fd);if(pid = fork()0)printf(fork error!);exit(1);else if(pid = 0)close(fd0);write(fd1,first1,7);close(fd1);exit(0);elseif(pid_sec = fork()0)printf(fork second error!);exit(1);else if(pid_sec=0)close(fd0);write(fd1,Child1,7);close(fd1);exit(0);elsewait(0);close(fd1);read(fd0,buf,7);printf(%sn,buf);wait(0);close(fd1);read(fd0,buf,7);close(fd0);printf(%sn,buf);exit(0);return 0;网络编程部分1、 简述TCP/IP协议中各层的主要功能,各有哪些主要协议。答:网络接口层:实现设备与设备之间的通信网络层:实现主机与主机之间的通信 IP,ARP,RARP,ICMP传输层:实现进程与进程之间的通信 TCP,UDP应用层:实现应用程序 HTTP,SMTP,DNS,SNMP,FNS,FTP2、 简述TCP/IP协议中三次握手的过程及涵义第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手3、 简述TCP/IP模型中应用层数据从主机A发送到主机B的整个过程。答: 1、首先是主机A通过connect()函数发送连接请求,主机B的accept()函数接受到请求。 此时建立了连接。 2、主机A将数据写如套接口。 3、主机B从套接口读取数据,并保存。 4、数据发送完毕后,主机A关闭套接口。 5、主机B关闭套接口。4、 利用setsocketopt()使用嵌套字支持广播,并编写两个程序,其中一个发送广播数据,另一个接收广播数据。#include #include #include / bzero#include #include #include #include / inet_ntop#include #include /#define MAX 1024*1024int main(int argc, char *argv)struct sockaddr_in srvAddr;int socked = socket(AF_INET, SOCK_DGRAM, 0);unsigned short port = 8000;char sendbuf1024= ,recvbuf1024=;int broadcast_en=1;socklen_t broadcast_len=sizeof(broadcast_en);size_t len=sizeof(srvAddr);bzero(&srvAddr, sizeof(srvAddr);srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);srvAddr.sin_addr.s_addr =inet_addr(55);if(socked 0)perror(socket);exit(1);printf(UDP Server Started at port %d!n, port);if ( (setsockopt(socked,SOL_SOCKET,SO_BROADCAST,&broadcast_en,broadcast_len)0 )perror(setsockopt);exit(1);while(1)printf(输入数据:);fgets(sendbuf,1024,stdin);sendbufstrlen(sendbuf)-1=0;sendto(socked,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&srvAddr,(socklen_t)len);#include #include #include / bzero#include #include #include #include / inet_ntop#include #include /#define MAX 1024*1024int main(int argc, char *argv)struct sockaddr_in srvAddr;int socked = socket(AF_INET, SOCK_DGRAM, 0);unsigned short port = 8000;char recvbuf1024=;int broadcast_en=1;socklen_t broadcast_len=sizeof(broadcast_en);size_t len=sizeof(srvAddr);bzero(&srvAddr, sizeof(srvAddr);srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);srvAddr.sin_addr.s_addr =inet_addr(55);if(socked 0)perror(socket);exit(1);printf(UDP Server Started at port %d!n, port);printf(Binding server to port %dn, port);if( (bind(socked,(struct sockaddr *)&srvAddr,(socklen_t)len)0 )perror(bind);exit(1);while(1)if(recvfrom(socked,recvbuf,strlen(recvbuf),0,(struct sockaddr*)&srvAddr, (socklen_t *)&len)0)perror(recvfrom);exit(1);else printf(%sn,recvbuf);5、 编写一个UDP类型的client/server实例。#include #include #include / bzero#include #include #include #include / inet_ntop#include #include /#define MAX 1024*1024int main(int argc, char *argv)struct sockaddr_in srvAddr;int socked = socket(AF_INET, SOCK_DGRAM, 0);unsigned short port = 80;char sendbuf1024= ,recvbuf1024=;int broadcast_en=1;socklen_t broadcast_len=sizeof(broadcast_en);size_t len=sizeof(srvAddr);bzero(&srvAddr, sizeof(srvAddr);srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);srvAddr.sin_addr.s_addr =htonl(INADDR_ANY);if(socked 0)perror(socket);exit(1);printf(UDP Server Started at port %d!n, port);while(1)printf(输入数据:);fgets(sendbuf,1024,stdin);sendbufstrlen(sendbuf)-1=0;sendto(socked,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&srvAddr,(socklen_t)len);#include #include #include / bzero#include #include #include #include / inet_ntop#include #include /#define MAX 1024*1024int main(int argc, char *argv)struct sockaddr_in srvAddr;int socked = socket(AF_INET, SOCK_DGRAM, 0);unsigned short port = 80;char recvbuf1024=;int broadcast_en=1;socklen_t broadcast_len=sizeof(broadcast_en);size_t len=sizeof(srvAddr);bzero(&srvAddr, sizeof(srvAddr);srvAddr.sin_family = AF_INET;srvAddr.sin_port = htons(port);srvAddr.sin_addr.s_addr =htonl(INADDR_ANY);if(socked 0)perror(socket);exit(1);printf(UDP Server Started at port %d!n, port);printf(Binding server to port %dn, port);if( (bind(socked,(struct sockaddr *)&srvAddr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论