![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
ygmdream
为人处世!
展开
-
radius客户端编程
库使用参考:http://wiki.freeradius.org/project/Radiusclient ftp://ftp.freeradius.org/pub/freeradius介绍参考: http://wiki.freeradius.org/config/Radclientwin7安装radius服务端: WinRadius-设置-系统-NAS密...原创 2018-05-08 09:07:26 · 3346 阅读 · 0 评论 -
输出目录下所有文件
Linux下DIR_dirent_stat等结构体详解转载 2014-05-27 13:35:45 · 925 阅读 · 0 评论 -
Linux程序设计-mmap使用
#include #include #include #include #include typedef struct { int integer; char string[24];} RECORD;#define NRECORDS (100)int main(){ RECORD record, *mapped; int i, f;转载 2014-05-27 13:31:01 · 977 阅读 · 0 评论 -
TCP服务端-客户端(客户端具有重连功能)
/*先看TCP服务器端的程序:*/#include #include #include #include #include #include #include #include #define PORT 10000int main(int argc, char *argv[]) { int sockfd,new_fd; struct socka转载 2014-05-23 18:05:24 · 3643 阅读 · 0 评论 -
给定任意一个字符串,找出所有重复字符的重复的次数
/*找字符串中重复字符的个数*/#include //printf#include //malloc#include //strlen/*由ascii码表可知字符是从0-127的, 字符对应的统计数目放在以该字符为下标的count中*/void fun(char *dst, int *count, const char *src){ int i = 0; int原创 2014-05-25 18:30:04 · 3321 阅读 · 0 评论 -
Ping的详细过程
Ping过程详解 Ping命令的主要作用的是检查网络的连通情况和检测网络的速度。相信大家都用过Ping命令,下面主要介绍一下Ping命令是怎样一个执行过程。 主要的Ping有两种情况,一种是同一网段,一种是跨网段的。 首先看一个拓扑图:首先,如果主机A要Ping主机B,那么主机A就要封装二层报文,他会先检查自己的MAC地址,如果没转载 2014-05-23 08:19:09 · 2112 阅读 · 0 评论 -
将原有的buffer中所有空格去掉
/*说明:直接利用原有的buffer存放的而且只需遍历一次因为zhan*/#includeint main(){ char str[20]="123 456 789 12"; int i,k=0; for(i=0;str[i]!='\0';i++) { if(str[i]!=' ') str[k++]=str[i]; }转载 2014-05-23 08:05:25 · 959 阅读 · 0 评论 -
简单版-Makefile
fun.hint add(int a, int b);fun.c#include"fun.h"int add(int a, int b){return a+b;}原创 2014-05-22 23:08:42 · 497 阅读 · 0 评论 -
进程和线程的联系和区别
进程和线程的联系和区别 (2012-03-28 21:31) 定义:一、进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。二、线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程转载 2014-05-21 19:27:03 · 903 阅读 · 0 评论 -
C++内存管理学习堆和栈-【1】
一 C++内存管理 1.内存分配方式 在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后在详细分析各种分配方式。 1.1 C语言和C++内存分配区 下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C++内存分布图,简单易懂;以下内存分配图,区别就是图1和2则分为初始化和未初始化静态变量区,图3中是全局变量区。 C转载 2014-05-22 22:14:45 · 579 阅读 · 0 评论 -
TCP三次握手-四次挥手
参考:相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此转载 2014-05-22 21:11:06 · 561 阅读 · 0 评论 -
双向循环链表
代码实现:#include #include #include /*双向循环链表:首先要假设某个节点为头结点说明: pb一般表示当前节点 pf一般表示当前节点的前项节点*/#include #include typedef struct DbNode{ int data; struct DbNode *pre; struct DbNode转载 2014-05-22 20:33:30 · 618 阅读 · 0 评论 -
C语言学习之指针的右左法则
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start reading转载 2014-06-17 13:31:29 · 738 阅读 · 0 评论 -
fork-fork总共几个进程
两个进程中,原先就存在的那个被称作“父进程”,新出现 的那个被称作“子进程”。父子进程的区别除了进程标志符(process ID)不同外,变量pid的值也不相同,pid存放的是fork的返回值。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三 种不同的返回值: 1. 在父进程中,fork返回新创建子进程的进程ID; 2.在子进程中,fork返回0;原创 2014-05-22 21:24:28 · 2895 阅读 · 0 评论 -
GDB 单步调试
1、首先需要用gcc(g++) 对源文件进行编译生成可执行文件,并且在编译时加上选项-g,把调试信息加到目标文件中。2、假设生成的可执行文件为test,那么gdb test 可以用gdb打开test文件,然后通过break linenum设置断点。可以输入list查看源文件和行号,方便设置断点。断点设置好后就可以run命令运行到断点处了。下面是转载一、初始化输入gd转载 2015-03-01 21:50:08 · 641 阅读 · 0 评论 -
字串倒序-找错题
(1)#include"string.h"(2)main()(3){(4) char*src="hello,world";(5) char* dest=NULL;(6) int len=strlen(src); (7) dest=(char*)malloc(len);//要为\0分配空间 char *dest=(char*)malloc(len+1);(8) c原创 2016-02-26 22:37:33 · 627 阅读 · 0 评论 -
strcpy函数与memcpy函数实现
=====编程实现strcpy函数======已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc); 要求如下。(1)不调用库函数,实现strcpy函数;(2)解释为什么要返回char *。程序代码如下:1 #include23 char原创 2016-02-26 22:22:41 · 817 阅读 · 0 评论 -
递归
【1】#include "stdio.h"#include "windows.h" /*递归调用执行过程:递归函数调用之前代码(函数的调入):每次进入都会执行一遍(调用函数后面的都不执行),直到不满足某个条件而退出。递归函数调用之后代码(函数的返回):每次退出时执行一遍(调用函数前面的都不再执行)。 传入的参数即局部变量(调用前对参数的访问顺序如54321),将全原创 2014-05-11 17:04:09 · 864 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区转载 2016-02-26 21:23:42 · 499 阅读 · 0 评论 -
内存对齐详解
内存对齐详解假设结构体存储下标从0开始的先是按照#pragma pack(8)参数依次和数据成员比较:按照成员下标是比较结果中小者的倍数;最后再按照#pragma pack(8)参数与结构体成员占空间最大者比较,结构体整体的长度是比较结果中小者的倍数; 1、分析说明:字节对齐(#pragma pack(2))输出结果:sizeof(structtest_t) = 10原创 2014-05-11 17:21:47 · 873 阅读 · 0 评论 -
大小端判断
1、了解:小端模式是:高地址存放高字节, 低地址存放低字节.(即正常的:高存高、低存低) 大端模式是:高地址存放低字节, 低地址存放高字节. 2、举例说明32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址 0x4000 0x4001 0x4002 0x4003 存放内容原创 2014-05-11 16:55:14 · 650 阅读 · 0 评论 -
子进程继承父进程的什么不继承什么
知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为 不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是 这些东西的 *拷贝*,不是它们本身。由子进程自父进程继承到:进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))环境(environment)转载 2016-02-18 09:25:30 · 5924 阅读 · 0 评论 -
#define 详解
http://www.crifan.com/_define_detailed/1. #define的变体,即#ifndef,可以防止头头文件的重复引用[解释]#ifdef和 #define组合,一般用于头文件中,用以实现防止多个文件对此同一个头文件的重复引用.实际使用中,即使你的头文件暂时没有被多个文件所引用,为了增加程序可读性,移植性,健壮性等,还是最好都加上。其用转载 2015-06-19 09:28:07 · 1127 阅读 · 0 评论 -
Linux-信号量PV(2)
参考:http://blog.csdn.net/pcliuguangtao/article/details/6744557转载 2014-05-23 17:41:36 · 1253 阅读 · 0 评论 -
Linux-信号量PV(1-2)
1 信号量功能信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量及对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。2 sem规定很显然,我们规定:sem大于等于零的时候代表可供并发进程使用的资源实体数;sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值转载 2015-03-01 20:57:27 · 860 阅读 · 0 评论 -
如何使用gdb调试多进程
面临问题:一般情况下,如果被gdb调试的程序中调用fork派生出一个新的子进程,这时gdb调试的仍然还是父进程,其子进程的执行不被理会。如果之前你在子进程的执行routine上设置了断点,那么当子进程执行到那个断点时,子进程会因为收到一个SIGTRAP信号而自行终止,除非你在子进程中拦截了该信号。那么使用GDB该如何调试多进程程序呢?测试程序]我们先看看我们的测试程序:/* in转载 2014-05-22 23:05:28 · 714 阅读 · 0 评论 -
单向链表是否成环
只需要:两#include #include typedef struct _A{ int data; struct _A* next;}A;/*p_1每次后移一个节点p_2每次后移两个节点*/void fun_loop(A *head){ A *p_1 = head; A *p_2 = head; while(p_2!=NULL) { p_1 =转载 2014-05-22 20:27:53 · 1232 阅读 · 0 评论 -
strlen与sizeof的区别
strlen与sizeof的区别 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。4.数组做sizeof的参数不退化,传递给转载 2014-05-22 22:32:06 · 531 阅读 · 0 评论 -
基于ARM9平台的Mplayer开发
u 项目描述: 实现歌曲播放、歌词滚动同步显示、歌曲快进快退、任意时间播放、进度条显示功能u 项目收获: 1、 熟练掌握了多线程和多进程机制及进程间的管道通信机制,熟练TFT图形库的使用和exec 函数族的使用 2、在编程中熟练使用字符串处理函数和双向循环链表的插入和删除操作,以及open、read 等对文件的操作原创 2014-05-11 19:23:12 · 1213 阅读 · 0 评论 -
mplayer编程模式控制命令
slave模式协议-------------------关于slave模式,MPlayer为后台运行其他程序。不再截获键盘事件,MPlayer会从标准输入读一个换行符(/n)分隔开的命令。要动手尝试slave模式,运行 mplayer -slave -quiet 并在控制台窗口输入slave命令。您也可以使用一个fifo文件(命名管道): m转载 2014-05-12 09:42:51 · 10099 阅读 · 1 评论 -
基于8051单片机的1602液晶显示温度和时间
1602具有8根数据线和三根控制线(E使能线 R/W读写线 RS表示数据还是指令)一般是先写地址再写数据即可原创 2014-05-11 19:30:35 · 2357 阅读 · 0 评论 -
换工作需要考虑的
想好下一步要干什么,原创 2014-05-12 12:46:21 · 707 阅读 · 0 评论 -
fork与vfork的区别
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec 或exit转载 2014-05-12 09:08:31 · 551 阅读 · 0 评论 -
智能家居项目-2
【1】注册和找回密码功能,Index.html中设置如下跳转连接href="./register.html"> 注册账号 href="./getpwd.html"> 找回密码href="./alterpwd.html"> 修改密码 href="./alter_usr.htm原创 2014-05-18 10:24:45 · 1159 阅读 · 0 评论 -
面试题
一:请写出 BOOL flag 与“零值”比较的 if 语句。(3分)标准答案:if ( flag ) if( !flag )如下写法均属不良风格,不得分。if (flag == TRUE) if (flag == 1 ) if (flag ==FALSE) if (flag == 0) 请写出 float x 与“零值”比较的 if转载 2014-05-12 14:01:59 · 536 阅读 · 0 评论 -
打洞技术说明-得出结论
结论1:只要单侧NAT属于Full Cone NAT,即可实现双向通信。结论2:只要两侧NAT都不属于Symmetric NAT,也可双向通信。换种说法,只要两侧NAT都属于ConeNAT,即可双向通信。结论3:一侧NAT属于Symmetric NAT,另一侧NAT属于IP限制型NAT,也可双向通信。结论4:一侧NAT属于Symmetric NAT,另一侧NAT属于IP+PORT限原创 2014-05-12 13:22:32 · 816 阅读 · 0 评论 -
高并发EPOLL网络模型
epoll分为LT水平触发模型和ET边沿触发模型LT模型类似于原来的select/poll操作,只要还有没有处理的事件就会一直通知直到处理为止. ET模型当套接字“状态发生变化”时候触发一次通知.epoll使用epoll_create1函数相当于创建了一棵红黑树,epoll_ctl函数把要监听的fd放到监听集合(红黑树)中去,并给每个fd命名好了回调函数,当集合中任何fd有事件发生时,转载 2014-05-11 19:07:33 · 2915 阅读 · 0 评论 -
蓝桥杯-几道题
例如:1-证明PI=3.1415926相当于求单位圆面积PI(r^2)=PI(1^2)=PI原创 2014-05-11 18:56:50 · 3073 阅读 · 0 评论 -
深入理解指针
1 、我的总结:int *p; 指针的类型 【去掉p,剩下的】 指针所指向的类型【去掉*p,剩下的】 2 、sizeof() 测试结果int (*ptr)[3]; //ptr代表指针,因此测得值为4int *ptr[3]; //ptr代表数组名,每个成员是int * ,因此占3个*4=12转载 2014-05-11 18:26:16 · 585 阅读 · 0 评论 -
双向链表
#include #include typedef struct _DOUBLE_LINK_NODE{ int data; struct _DOUBLE_LINK_NODE* prev; struct _DOUBLE_LINK_NODE* next;}DOUBLE_LINK_NODE;/*创建一个节点,使节点的prev=NULL next=NULL value=xxx返回转载 2014-05-12 13:52:01 · 498 阅读 · 0 评论