- 博客(31)
- 资源 (2)
- 收藏
- 关注
原创 linux网络编程之广播编程
广播方式主要是指使用UDP套接口发送数据,发送数据的目标地址不是普通的地址,而是所指定网络的广播地址。 什么是广播地址?是指IP地址中主机地址部分全为1的IP地址。下面是一个广播发送简单流程图。如何实现广播发送?一般情况下使用sendto函数只能向非广播地址发送数据,如果要发送广播数据就必须要告诉内核,可以通过设置套接字属性为SO_BROADCAST来坐到这一点。i
2013-04-15 20:10:31 3286 1
原创 linux网络编程多进程并发服务器
服务器端代码#include #include #include #include #include #include #include #include #include #include #define PORT 1234#define MAXSIZE 1024struct ARG{ int connfd; struct sockaddr_in
2013-04-12 14:23:56 866
原创 linux网络编程多进程并发服务器
服务器端:#include #include #include #include #include #include #include #include #define PORT 1234#define MAXSIZE 1024static int clientProcess(int connfd, struct sockaddr_in clientSoc
2013-04-12 13:59:23 1016
原创 基于select函数的单进程并发服务器程序----TCP
下面是一个简单的时间服务器程序。#include #include #include #include #include #include #include #include #include #define MAX_LISTEN 5 #define PORT 1234 i
2013-04-12 13:51:30 906
原创 select函数介绍
阻塞方式block,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。使用Select就可以完成非阻塞non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。
2013-04-12 13:47:11 785
转载 关于setsockopt和getsockopt函数
功能描述: 获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#includ
2013-04-12 13:34:51 704
转载 优化C语言代码
程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化了程序的执行速度,通常会带来代码增加的副作用,很难鱼与熊掌兼得,只能在设计时掌握一个平衡点。一、程序结构的优化1、程序的书写结构虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰、明了的程
2013-04-11 15:35:34 738
转载 C语言编程时常犯十八个错误
C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。1、书写标识符时,忽略了大小写字母的区别。m
2013-04-11 15:33:31 671
转载 mysql查询操作
一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,,!=,!>,!,= 二查询字符串 SELECT * FROM tb_stu WHERE sname = '小刘' SELECT * FROM tb_stu WHERE sname like '刘%' SELECT * FROM tb_stu W
2013-04-08 20:29:27 662
原创 makefile文件模板
linux下程序开发中,Makefile文件是一个很重要的工具文件。下面是简单的两个Makefile文件模板,大致可以按这样修改1、单个文件的Makefile文件模板CROSS_COMPILE = arm-linux- CC = $(CORSS_COMPILE)gccLD = $(CROSS_COMPILE)ldSTRIP = $(CROSS_COMPILE)strip
2013-04-08 20:15:07 887
原创 进程间通信之FIFO
管道使用起来很方便,但是没有名字,因此只能用于具有亲缘关系的进程之间进行通信,而有名管道就克服了这一点,FIFO管道提供了一个路径名与之相对应,即使进程不是亲缘进程,只要能访问到该路径就能使用FIFO进行通信。有名管道的创建:#include #include int mkfifo(const char *pathname, mode_t mode);第一个
2013-04-08 20:13:11 3483
原创 ipcs命令和ipcrm命令介绍
在进程间通信过程学习中,经常用到的两个命令:ipcs和ipcrm.查看ipc对象信息#ipcs查看全部ipc对象信息#ipcs -a查看消息队列信息#ipcs -q查看共享内存信息#ipcs -m查看信号量信息#ipcs -s删除IPC对象的ipcrmipcrm -[smq] ID 或者ipcrm -[SMQ] Key-q
2013-04-08 20:08:41 1041
原创 进程间通信之消息队列
在linux下有两种消息队列,一种是POSIX的消息队列,另一种是system v消息队列。system V消息队列使用消息队列标识符标识,在某个进程往一个队列中写入一个消息之前,不要求另外某个进程正在等待该队列上的一个信息的到达。对于系统中每个消息队列,内核都维护一个定义在头文件中的消息结构,结构定义如下:struct msqid_ds{ struct ipc_perm m
2013-04-08 20:07:01 710
原创 C语言中三大经典的排序算法
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。冒泡排序:思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n-1趟比较,第一次比较中要进
2013-04-08 19:59:44 14419
原创 关于struct,union,enum三大复合数据类型
struct结构体struct声明一个结构体,它将一些相关联的数据打包成一个整体。首先看结构体占用内存空间的大小。struct student{ }stu;sizeof(stu)是多少?这里我们联想到前面讲到的模子的概念,大概就知道答案了。关于求结构体所占内存空间的大小,我们遵循字节对齐的原则,计算的出的结果是8的倍数。看下面的代码:struct stude
2013-04-08 19:54:04 7714 1
原创 struct tm时间和字节数之间的转换
在某些场合需要将时间存储格式压缩到4个字节,在字符串的时间和字节数的格式之间进行一个转换。短时间存储的格式:Time(HMS) /*时分秒*/ Bit Position0 1 2 3 45 6 7 8 9 AB C D E FLength(bit)56
2013-04-08 19:51:18 2548
原创 比较两个数的大小
比较两个数大小的方法 比较两个数大小的方法有很多种,如if、?:、switch等其他的判断语句。在这里看看其他的方法: 方法1、 a=a+b; b=a-b; a=a-b; 方法2:
2013-04-07 21:27:19 1068
原创 strcpy和memcpy函数的实现
strcpy函数的原型为:char *strcpy(char *strDest,const char *strSrc) char *strcpy(char *strDest,const char *strSrc){ assert((strDest != NULL) && (strSrc != NULL)); char *address = str
2013-04-07 21:26:13 806
原创 linux下C实现cat命令
#include #include #include #include #include #include #include int cats(const char *filename);void print(const char *filename, struct stat *st);void mode_to_letters(int mode, char
2013-04-07 21:24:37 4944
原创 在linux下创建自己的命令
当我们自己编写了一个比较好的程序,比如说,我写了一个打印文件的cat命令,觉得比较好用,你想把他当系统命令来使用。只需要简单的步骤就可以实现。 将你编译好的程序可执行文件复制到/bin目录下面。仅此而已。 编写自己的man资源,很简单,你编辑(用vi或其它任何文本编辑工具都可以)一个cat文件,里面是你的命令使用方法说明,然后用gzip cat命令把这手册压缩一下生成一个
2013-04-07 21:23:12 1163
原创 嵌入式面试中遇到几道笔试题
嵌入式编程方面的问题:1、找出下面程序的错误 (一个中断服务子程序ISR) interrupt double compute_area(double radius) { double area = PI *radius * radius; printf("\nArea=%f",area); return area;
2013-04-07 21:21:47 3880
原创 static关键字的作用
这个关键看似简单,但是在程序中却有很多的作用: 1、在函数体内,一个被申明为静态的变量在这一函数调用的过程中维持不变。 2、在模块内但是函数外,一个被声明为静态的变量可以被模块内所有函数访问,但是不能被模块外的函数访问。 3、他是一个本地的全局变量。在模块内,一个被申明为静态的函数只可被这一模块捏的函数调用,那就是,这个函数被限制在声明他的模块的本地范围内。
2013-04-07 21:20:11 622
原创 const和#define的用途和比较以及注意事项
const的用途: 不规范的说法:const意味着“只读”。 1、可以定义const变量 2、const可以修饰函数参数(输入参数)、返回值、甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。#define 宏定义: 宏定义中不能有分号,还有要注意宏定义中括号的使用。 const和#define都可以
2013-04-07 21:19:07 1043
原创 stat结构体以及文件状态相关函数
基本的stat结构体的大体组成成员如下: struct stat { mode_t st_mode; //文件类型或文件模式 ino_t st_ino; //目录进入点的inode节点 dev_t st_dev; //系统文件设备 dev_t st_rdev; //特殊文件设备
2013-04-07 21:17:25 2632
原创 C语言实现的linux下ls命令
用C语言实现linux下的ls -l命令。与文件相关的结构体、函数等等知识请看"stat结构体以及文件相关函数"#include #include #include #include #include #include #include #include void do_ls(char *dirname);voi
2013-04-07 21:15:41 10806 4
原创 判断一个邮箱地址是否合格
主要使用的函数:memchr函数:在某一内存范围中查找一特定字符 #include void *memchr(const void *s,int c,size_t n) 函数说明:函数从头开始搜索s所指的内容内存前N个字节,直到发现第一个值为c的字节,则返回 指向该字节的指针; 返回值:如果找到指定的字节则返回改字节的指针,否则返回0. 判断一个邮箱地址
2013-04-07 21:12:48 3345
原创 关于sizeof和strlen的使用
关于sizeof和strlen经常容易搞混淆,特别是初学者。 先看一个关于sizeof的应用的实例: 写出下面程序的答案: 答案:4,11,100,400,4,3,4,6,8,4,4 1、ss1是一个指针,指针的大小是一个定值,就是4. 2、ss2是一个字符数组,这个数组的出事大小
2013-04-07 21:08:10 913
原创 BOOL,float,指针变量与零值比较的if语句
BOOL flag 与“零值”比较的if语句:标准答案: 不良风格: if(flag) if(flag == TRUE) if(!flag) if(flag ==
2013-04-07 21:01:16 1102
原创 内存使用
在做嵌入式开发过程中,内存问题时时提醒着我们,小心小心又小心的使用者有限的内存。 内存分配方式:1、从静态区域分配。内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。例如全局变量、static变量。2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配的运算内置于处理器的指令集中,效率很高,但是
2013-04-07 20:59:04 693
原创 关于x=x+1、x+=1、x++的执行效率问题
好久不来了,把最近遇到的一些问题贴出来,总结总结,增加自己对他们的记忆,欢迎各位网友不吝赐教! 关于x=x+1、x+=1、x++的执行效率问题是小弟在一次面试中以为面试官提及的。 x=x+1的效率最低,因为他的执行过程如下:1、读取右x的地址;2、x+1;3、读取左x的地址;4、将右值传给左边的x(编译器并不认为左右x的地址相同)x+=1其次,其执行过程如下
2013-04-07 20:50:46 912
原创 守护进程
UNIX操作系统为用户提供inetd daemon 进行网络服务管理。它将所有的后台应用程序置于它的管理之下,在客户端没有请求时,所有的后台应用程序都不启动,一旦客户端有特定的请求上来,它将根据/etc/services 和/etc/inetd.conf 文件描述的请求端口号和服务名调动相应的应用程序进行处理,而其它后台应用程序是不启动的。被启动的应用程序完成了特定任务后就终结自己的进程,这就减轻
2013-04-07 20:44:29 806
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人