- 博客(95)
- 资源 (7)
- 收藏
- 关注
原创 求结构体的偏移量方法
在看网关代码的时候进程看到类似于这样的语句:typedef struct DeviceInfoDetailTable_t{ struct DeviceInfoDetailTable_t *Next; u16 Len; u16 Index; u8 extAddr[8]; u8 EndPoint; u8 deviceName[16]; u16 AppDeviceID; u16 De
2017-03-17 10:50:05
993
原创 17-23 Monkey源码分析
1. Monkey介绍轻量级Web服务器:http://www.monkey-project.com/documentation/小型、快速开源项目设计目标:主要针对嵌入式设备,硬件配置不高的情况下提供较高的性能支持ARM、X86、X64处理器,能在多种Linux平台运行多线程并发模式安装要求:2.6.26或以上;pthreads库和libc库。2. Monkey主
2017-03-07 19:01:32
582
原创 10-16 项目规划
1. 项目目标1.1项目目标必须明确:做什么、不做什么、做到什么程度可量化:非量化的描述量化描述大并发并发量>1000tps低延时响应时间高可靠性故障率通过交互成果体现阶段成果设计阶段设计文档开发代码、文档测试测试报告
2017-03-04 20:03:18
532
原创 8-9 Http协议及HTTP服务器
1. HTTP协议:超文本传输协议用于从WWW服务器传输超文本到本地浏览器的传输协议静态网页传输文件下载应用层协议客户端是浏览器,服务器端是网站RFC 2616定义了今天普遍使用的HTTP1.11.1HTTP请求组成:请求行,消息报头,请求正文请求行:method Request-URI HTTP_VERSION CRLF,如GET /index.html HT
2017-03-04 19:20:58
696
原创 7 环境搭建
1. 虚拟机,自己安装,装好后bridge网络。2. 编译器:CC自动编译工具automakeubuntu下apt-get install build-essential 自动安装编译器之后在源代码monkey 1.0.1代码下运行脚本./configure生成makefie.
2017-03-04 19:14:41
365
原创 3-6 网络编程理论回顾
1. 网络协议分层模型1.1 ISO/OSI参考模型:ISO:International Organization for Standardization国际标准组织,提出者OSI:Open System Interconnect开放系统互联,模型名称物理层:物理、机械及电器标准,BIT流数据链路层:局域网主机-主机通信,数据帧网络层:广域网主机-主机通信,数据包、
2017-03-03 21:30:01
462
原创 20 课程总结,单机模式下的文件上传与下载
1. 例子:单机模式下的文件上传送和下载(1) 输入服务器的地址: 路径和目录名(2) 列出服务器中有哪些文件: opendir readdir (3) 输入从服务器下载的文件名 或 上传文件到服务器的文件名(4) 文件下载 或 文件上传送文件IO: open read write close标准I
2017-02-28 20:54:10
533
原创 18-19 目录IO
1. 文件IO和标准IO是对文件的读写操作目录IO是对目录的读写操作目录I/O与文件I/O函数的比较目录I/O文件I/Oopendir 只能打开目录mkdir 创建目录openreaddir 读目录readrewinddir 调整位置指针telldir
2017-02-28 20:14:13
514
原创 13-15 标准IO之fread、fwrite
1..全缓存的二个函数: fread /fwrite第一个参数 buf:写的内容第四个参数 fp:写到哪里去第二个参数 size:写的内容中,每一个单元所占的字节数第三个参数 nmemb:写的内容中,有多少个单元数总共写多少个字节,size*nmemb返回值:实际写的单元数。2. 读写函数效率比较使用time ./fgetc a.c b.c(a.
2017-02-28 19:24:33
482
原创 11-12 标准IO之feof,ferror,clearerr
1. 当返回错误时,怎样判读是已经到达文件结尾,还是读错呢? a. int feof(FILE *stream); 功能:判断是否已经到文件结束参数:文件流返回值:到文件结束,返回为非0,没有则返回0b.int ferror(FILE *stream);功能:判断是否读写错误参数:文件流返回值:是读写错误,返回为非0,不是则返回0c.void c
2017-02-27 20:55:08
618
原创 9-10 标准IO之gets,puts,fprintf,sprintf,fgetc,fputc
1. gets & puts//是行缓存的读写函数char *gets(char*s); int puts(constchar *s); gets 与fgets的区别:Ø gets()不能指定缓存的长度,这样就可能造成缓存越界(如若该行长于缓存长度),写到缓存之后的存储空间中,从而产生不可预料的后果;Ø gets()只能从标准输入中读;Ø gets()与fg
2017-02-27 19:39:13
676
原创 8 标准IO之fflush,无缓冲,fseek,rewind
1. fflush函数:刷新缓存函数:fflush(FILE*fp) // 把库函数中的缓存的内容强制写到内核中。2. stderr是无缓冲的函数stdout是行缓存的这些函数的缓存功能都根据简单代码进行测试。3. 调整位置指针fseek() 参数与lseek是一样的,但是返回值不一样lseek的返回值是:当前文件的位置指针值;fseek()
2017-02-27 19:24:15
673
原创 7 标准IO之fgets/fputs
1. 标准IO的读写函数,分三类a. 行缓存:遇到新行符(\n)或写满缓存时,即调用系统调用函数 读:fgets, gets, printf, fprintf,sprintf 写:fputs, puts,scanf 一个字符的读写,是否是行缓存? 读:fgetc, getc, getchar 写:fputc, putc,putchar
2017-02-26 21:38:59
598
原创 5 标准IO的缓存
1. 文件IO与标准IO的关系文件IO:是直接调用内核提供的系统调用函数, 头文件是unistd.h标准IO:是间接调用系统调用函数,头文件是: stdio.h之前学过:输入输出相关的函数,都是和标准的输入(键盘),标准的输出(显示器)getchar(),putchar() ----一个字符gets(buf),puts(buf) ----一串字符scanf(
2017-02-26 19:35:13
542
原创 3-4 read/write,lseek函数,cp指令的代码实现
1. write write(intfd, void *buf, size_t count ):第一个参数:向哪一个文件中去写;第二个参数:向这个文件中写什么内容;第三个参数:向这个文件中写多少个。返回值:是实际写的字节数。2. readread(intfd, void *buf, size_t count)第一个参数:从哪一个文件中去读;第二个参数:读到什
2017-02-26 13:49:18
1112
原创 2 Open/Close函数及touch命令的实现
1. input & output:站在应用层考虑Input:内核-->用户,从内核读取数据或从文件读取数据 ————read函数Output:用户-->内核,写数据到内核或写数据到文件中 ————write函数2. 内核中文件太多了,写到哪个文件,从哪个文件中读呢?这些功能由内核管理,又称文件管理。因此read/write时需要有参数指定某个文件,而且在read/writ
2017-02-25 19:35:32
1710
原创 1 系统编程综述
马小陆老师的Linux高级编程之IO编程,自做笔记。1. Linux高级编程,也称为系统编程,是在应用层编程,更具体的说是内核向应用程序提供的接口层。学习高级编程,可以感知内核功能的强大之处。高级编程分成:文件管理、进程管理、设备管理、内存管理、网络管理。2. 从图中可以看出printf函数也是通过调用IO函数write将数据写入内核。printf函数是库函数,
2017-02-25 19:12:40
794
转载 Linux平台中调试C/C++内存泄漏方法
在大华面试的时候,被问到了如何调试程序的一些疑难杂症,最主要的就是跟内存相关的问题,网上搜了下, 有挺多工具可以用来跟踪、调试。文章内容装载于: http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,
2017-02-24 15:10:06
445
原创 19-20 xshell/quagga开发流程案例
1. xshell需求:a. 用户能登录服务器;b. 用户端输入命令,一些linux系统管理的相关命令;c. 一些客户端自定义命令,如exit,help等2. 项目实施之流程图3. 项目实施之协议定义协议一般有两种方式:a. 字符串形式的协议1). 自定义aa. 登录:“login|user|password”bb. 执行
2017-02-23 17:13:58
473
原创 18 原始套接字
1. 创建原始套接字注意:原始套接字要超级用户才能使用。调用socket函数,即可创建原始套接字。参数需要注意变更:int socket(AF_INET,SOCK_RAW,protocol)int socket(AF_PACKET,SOCK_RAW,protocol)2. 发送消息调用sendto可以发送信息ssize_t sendto(int sockfd, co
2017-02-23 11:56:25
355
原创 17 multicast示例
1. server往组发送信息#include "socket_includes.h"#include int main(int argc, char*argv){ int sockfd; struct sockaddr_in mcast_addr; char buf[100] = MCAST_DATA; int on = 1; int ret;
2017-02-22 21:18:14
365
原创 16 UDP广播示例
1. 例程如下#include "socket_includes.h"int main(int argc, char *argv[]){ int sockfd; struct sockaddr_in server, client, broadcast; char buf[200]="hello.brocast.", read_buf[100]; char dest[
2017-02-22 20:57:27
396
原创 14-15 高并发服务器中epoll编程
1. 通过epoll实现高并发服务器模型LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表.ET (e
2017-02-22 13:46:47
443
原创 13 select的优化一
1. 上个例子中,select通过for循环轮询client套接字,轮询的范围比较大,有优化的地方。2. 优化代码:通过数组存储client的套接字,达到少轮询的效果,可以在client数量比较多、读写数据量大的情况下看到效果;select的最大连接数1024,所以在处理并发量比较小的时候可以用上,如果并发大的时候需要重新考虑。#include "socket_includ
2017-02-21 20:37:36
356
原创 10-11-12 IO复用及select例子
1. 阻塞式IO2. 非阻塞式IO3. IO复用Select / epoll4. 信号驱动IO5. 异步IO
2017-02-21 10:58:17
357
原创 9 多进程并发服务器模型
1. 多进程并发服务器的实现,学习点:fork子进程处理新客户端连接请求;通过信号回收断开连接的子进程资源,不会让client主动断开时子进程处于僵死状态;封装功能函数,实现模块化。#include "socket_includes.h"#include int mz_ipv4_tcp_create_socket(void){ int listenfd, sockfd,
2017-02-20 21:18:24
370
原创 2-3-4-5 获取时间的客户端例子 TCP相关
1. OSI7层模型 vs 四层模型2. bzero vs memsetbzero是什么函数?比memset安全?3.
2017-02-19 21:18:48
336
原创 1. 网络编程基础与Wireshark使用
1. 看麦子课程的嵌入式Linux网络编程基础视频,作个笔记,一是加深印象,而是便于记录要点。2. 网络编程拓扑图局域网如下:广域网:3. wireshark使用:filter :过滤方法特别多,可以参考ubiqua的使用方法,类比过去ip.addr == 192.168.1.111设置关联IPip.src == 192.168.1.111:源IP
2017-02-19 19:26:25
433
原创 lesson5 线程的高级属性
1. 一次性初始化:互斥量智能初始化一次,再次初始化会出现错误。比如自己写库函数时将互斥量封装进去,这时一次性初始化就用上场了。定义变量pthread_once_t once_control = PTHREAD_ONCE_INIT;void init_routine(){//初始化互斥量//初始化读写锁}接下来在函数pthread_once引用上述变量和函数,多线程只会
2017-02-14 20:25:35
261
原创 lesson4 线程同步
1. 互斥量mutex2. 读写锁:pthread_rwlock_t rwlock//非常适合读次数大于写次数的程序读写锁的三种状态:读模式加锁、写模式加锁、不加锁。一次只有一个线程占用写模式的读写锁,但是多个线程可以同时占用读模式的读写锁。读写锁在写加锁状态时,在被解锁前,所有试图这个锁加锁的线程将会阻塞。以读加锁时,所有试图读模式加锁的线程都能获得访问权限,但是如果希望以写模式
2017-02-14 10:48:52
338
原创 lesson3 线程控制
1. 线程的终止:a. 进程调用exit,整个进程终止,谨慎使用。b. 线程退出方法:启动例程返回;被同一进程中的其他线程终止;线程调用pthread_exit退出。2. 线程连接:a. pthread_join:阻塞,直到指定线程退出;//要求调用该函数的线程是非分离的,如果是分离的,则掉用失败。b. pthread_detach分离线程。3. 线程取
2017-02-13 18:45:00
321
原创 linux git & github
简单记录下git和github同步信息问题,以便往后忘记了可以有据可循。1. install gitalex@alex-VirtualBox:~/Share/TestGit$ sudo apt-get install git[sudo] password for alex:Reading package lists... DoneBuilding dependency tre
2017-02-10 15:36:50
328
原创 lesson2 线程的创造和生命
1. 线程ID: 线程进程标识符类型 pthread_tpid_t获取IDpthread_self()getpid() 创建pthread_create() fork()pthread_t在linux中是unsigned long int类型2. pthread_self的使用;
2017-02-09 21:06:36
321
原创 lesson1 什么是线程
1. 进程:一个正在执行的程序,它是资源分配的最小单位。2. 线程:轻量级进程,程序执行的最小单位,程序独立调度和分配CPU的基本单位,它是进程中的一个实体。一个进程中可以有多个线程,共享进程的所有资源,线程本身只包含一点必不可少的资源。3. 并发:同一时刻只能有一条指令执行,但多个进程指令被快速切换,宏观上感觉多个进程同时执行的效果。并行:同一时刻多条指令在多个处
2017-02-09 21:04:29
334
原创 25 总结
1. 尹圣雨的TCPIP网络编程一书算是看完了,中间的windows部分跳过了,只看了linux相关内容。2. 文章的最后一章作了个总结:a. 一是说明书中的内容远远不足,适合入门学者,如需深入研究网络编程,需要兴趣驱使,查阅更多数据,了解更多知识;b. 网络编程与操作系统息息相关,也需要了解系统编程。c. 推荐了很多网络编程相关书籍:《APUE第二版》,之前看了第三版。两种看
2017-02-08 21:57:37
280
原创 24 实现http服务器端
1. HTTP:Hypertext Transfer Protocol超文本传输协议。超文本是可以根据客户端请求而跳转的结构化信息。HTTP协议是以超文本传输为目的而设计的应用层协议,是基于TCP/IP实现的协议,实现该协议就相当于实现了Web服务器端。2. Http协议又称为无状态的stateless协议从下图中可以看出服务器端响应客户端请求后立即断开,不会维持连接状态。即使
2017-02-08 16:44:07
530
原创 svn merge操作
一、目的简单记录svn的merge操作,特别是merge时的from,to很容易根据字面意思弄错。 二、操作1. 本地创建Testing目录,里面自动包含三个文件夹branches,tags, trunk.2. trunk目录下创建examples1目录,里面添加文件hello.c,之后commit到server.3. 创建分支到branches/examples
2017-02-08 11:11:06
32747
原创 18.2 多线程服务器端的实现2
1. 线程同步a. 需要线程同步的情况:1)同时访问同一内存空间;2)需要指定访问同一内存空间的线程执行顺序。b. 同步技术:互斥量Mutex和信号量Semaphore将临界区比喻成洗手间,线程同步理解成一把锁。为了保护个人隐私,进洗手间时锁上门,出来再打开;如果有人使用洗手间,其他人需要在外面等待;等待的人数可能很多,这些人需要排队进入洗手间。2. 互
2017-02-06 21:15:46
447
Test Driven Development For Embedded C 2011
2017-02-10
svn merge简单操作
2016-10-15
TI的ZHA协议栈
2013-06-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人