pthread_mutex_unlock(&mutex);//对互斥锁解锁 sem_t sem;
sem_init(&sem,0,1);//创建信号量并初始化它的值 sem_wait(&sem);//信号量的值减1 sem_post(&sem);//信号量的值加1 24、内存管理MMU的作用 *内存分配和回收 *内存保护 *内存扩充 *地址映射
25、ROM是只读存储器,掉电不丢失 RAM是读写存储器,掉电丢失
26、SRAM:CPU的缓存就是SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失
DRAM,动态随机存取存储器最为常见的系统内存,需要不断刷新,才能保存数据 SDRAM:同步动态随机存储器,即数据的读取需要时钟来同步。 27、signed char 的取值范围-128~127.
28、编译和链接有什么不同?(如外部符号的处理) 编译生成的是目标文件(object *.o);
编译过程中对于外部符号不做任何解释和处理。外部符号对应的就是“符号” 链接生成的是可执行程序
链接将会解释和处理外部符号。外部符号对应的是地址 29、已知strcpy函数的函数原型是:
char *strcpy(char *strDest, const char *strSrc)。其中,strDest是目的字符串,strSrc是源字符串。
不调用C++/C的字符串库函数,请编写函数strcpy char *strcpy(char *strDest, const char *strSrc) { int i=0;
if(!(strDest && strSrc)) return;
while(strDest[i++] = *strSrc++); return strDest; }
30、strcpy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?
为了实现链式表达式
int len = strlen(strcpy(strDest, strSrc));
31、写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个 #define MIN(a, b) (a) <= (b) ? (a) : (b) 32、关键字static的作用是什么 static用来修饰一个局部的变量的时候, 生命域是全局的 作用域是局部的
static用来修饰一个模块内的(某一个C的源程序文件)全局变量的时候 生命域不变
作用域减小,只在本模块内有效 static用来修饰一个函数的时候 作用域减小,只在本模块内有效 33、说明下面的声明的含义: A.
const int a; // a是一个常数 int const a; // a是一个常数 B.
const int *a; // a是一个指向整型常数的指针 int * const a; // a是一个指向整型变量的常指针 int const * a const; // a是一个指向整型常数的常指针 C.
char *strcpy(char *strDest, const char *strSrc); // 参数在函数内部不会被修改
const int strcmp(char *source, char *dest); // 函数的返回值不能被修改 const int a = strcmp(xx, yy); if(strcmp(xx,yy) != 0)
34、说明关键字volatile有什么含意,并给出例子。
volatile表示被修饰的符号是易变的。告诉编译器不要随便优化我的代码!! *一个硬件寄存器 *中断中用到的变量 *线程之间共享变量 volatile int a = 10; while((a & 0x01) == 0);
#define P_UART_STATUS ((const volatile unsigned int *)0x88000000); // volatile表示硬件会修改这个寄存器的内容 // const表示该寄存器只读,写无意义
35、printf可以接受多个参数,为什么,请写出printf的原型。 int printf(const char *fmt, ...);
36、什么是堆栈,简述为什么需要堆栈?
堆栈是计算机中最常用的一种数据结构,保存数据的一块连续内存;比如函数的调用是用堆栈实现的。
37、请列举常用的串行通信方式(两种以上),并简述串行通信和并行通信不同之处、优缺点。 异步通信和同步通信;并行速度快,串行口线间干扰小
38、列举一下你熟悉7层OSI协议中的几层。说说你最熟悉的一层协议的功能。 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
39、路由协议:网关-网关协议,外部网关协议,内部网关协议(RIP-1、RIP-IGRP、EIGRP、IS-IS和OSPF) 40、位转换
位 8 7 6 5 4 3 2 1 数 v8 v7 v6 v5 v4 v3 v2 v1 转换后:
位 8 7 6 5 4 3 2 1 数 v1 v2 v3 v4 v5 v6 v7 v8
unsigned char bit_reverse(unsigned char c) {
unsigned char buf = 0; int bit = 8; while(bit) { bit--;
buf |= ((c & 1) << bit); c >>=1; }
return buf; }
41、字符串倒序
1)、inverted_order(char *p) {
char *s1,*s2,tem; s1=p;
s2=s1+strlen(p)-1; while(s1 2)、inverted_order(char *p) { int len = strlen(src); char *des = (char *)malloc(len + 1); char *s = &src[len -1]; char *d = des; while(len-- != 0) *d++ = *s--; *d = 0; free(des); } 42、引用和指针的区别 (1). 指针是一个实体,而引用仅是个别名; (2). 引用使用时无需解引用(*),指针需要解引用; (3). 引用只能在定义时被初始化一次,之后不可变;指针可变; (4). 引用没有 const,指针有 const,const 的指针不可变; (5). 引用不能为空,指针可以为空; (6). “sizeof 引用”得到的是所指向的变量(对象)的大小, 而“sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的大小; (7). 指针和引用的自增(++)运算意义不一样; 43、队列和栈的区别 队列是先进先出,只能在一端插入另一端删除,可以从头或尾进行遍历(但不能同时遍历), 栈是先进后出,只能在同一端插入和删除,只能从头部取数据 44、四层模型?七层模型?TCP/IP协议包括? 这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层 这4层分别为:应用层、传输层、网络层、链路层。 TCP/IP协议族包括(IP)、(ARP)、(RARP)、(ICMP)、(UDP)、(TCP)、(RIP)、Telnet、(SMTP)、DNS等协议。 45、TCP通信建立和结束的过程?端口的作用 三次握手和四次挥手;端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口。 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。 23端口:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。 25端口:25端口为SMTP(Simple Mail TransferProtocol,简单邮件传输协议)服务器所开放, 主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。 53端口:53端口为DNS(Domain Name Server,域名服务器)服务器所开放, 主要用于域名解析,DNS服务在NT系统中使用的最为广泛。 67、68端口:67、68端口分别是为Bootp服务的Bootstrap Protocol Server (引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。 69端口:TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。 79端口:79端口是为Finger服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。880端口:80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的, 这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议。 99端口:99端口是用于一个名为“Metagram Relay”(亚对策延时)的服务, 该服务比较少见,一般是用不到的。 109、110端口:109端口是为POP2(Post Office Protocol Version 2,邮局协议2)服务开放的, 110端口是为POP3(邮件协议3)服务开放的,POP2、POP3都是主要用于接收邮件的。 111端口:111端口是SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口, 主要用于分布式系统中不同计算机的内部进程通信,RPC在多种网络服务中都是很重要的组件。 113端口:113端口主要用于Windows的“Authentication Service”(验证服务)。