Linux C高级编程
a1314521531
这个作者很懒,什么都没留下…
展开
-
Linux C高级编程——网络编程之TCP(3)
Linux网络编程(三)——TCP宗旨:技术的学习是有限的,分享的精神是无限的。1、TCP段格式 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识。32位序号、32位确认序号、窗口大小。4位首部长度和IP协议头类似,表示TCP协议头的长度,以4字节为单位,因此TCP协议头最长可以是4x15=60字节,如果没有选项字段, TCP原创 2016-04-05 08:47:06 · 2255 阅读 · 0 评论 -
Linux下获取xml调试信息等级
获取XML调试信息等级#ifndef _LOG_H_#define _LOG_H_#include #include #include #include #include #include #include #include #define CONF_FILE_NAME "/opt/can_book.xml"#define DEBUG_SON "de原创 2016-08-30 10:41:21 · 795 阅读 · 0 评论 -
C语言——标准库
C语言标准库宗旨:技术的学习是有限的,分享的精神的无限的。 断言 字符类测试 (部分)库函数抛出的错误代码 浮点数运算 检测整型数据类型值范围 本土化 数学函数 “非局部跳转” 信号 可变参数列表 一些常数,类型和变量 输入和输出 实用功能原创 2016-03-25 09:14:51 · 1224 阅读 · 0 评论 -
Linux C标准
Linux下C标准1、ANSI CANSI C的目标是为各种操作系统上的C程序提供可移植性保证(如Linux与windows之间)。ISO C标准定义的头文件验证程序断言信号支持复数算法可变参数表字符类型布尔类型和值原创 2016-03-25 09:23:28 · 842 阅读 · 0 评论 -
Linux开发初步
Linux开发初步宗旨:技术的学习是有限的,分享的精神的无限的。一、库函数与系统调用1、系统调用函数和库函数库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准。使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性。系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个原创 2016-03-25 11:49:26 · 597 阅读 · 0 评论 -
内存管理函数
内存管理函数一、 动态申请内存1、 malloc/free——动态分配内存和释放内存(1)函数原型void *malloc(size_tsize);void free(void *str);(2)函数参数 size:要分配的空间大小(3)返回值 返回一个指向分配的连续存储域首地址的指针。失败返回NULL。原创 2016-03-25 12:01:02 · 740 阅读 · 0 评论 -
Linux C目标文件
LinuxC目标文件宗旨:技术的学习是有限的,分享的精神的无限的。一、目标文件格式(ELF格式)编译器编译源代码后生成的文件叫做目标文件。目标文件是已经编译后的可执行文件,只是还没有经过链接的过程。PC平台流行的可执行文件格式:windows下的PE和Linux下的ELF。动态链接库和静态链接库也是按照可执行文件存储的。1、ELF文件归于4类:原创 2016-03-27 15:12:41 · 1634 阅读 · 4 评论 -
main函数
main函数宗旨:技术的学习是有限的,分享的精神的无限的。Linux下运行的程序多数是带参数的,例如ls –l等。一般来说,所有程序代码都是从main函数开始执行的。main函数(1)函数原型int main(int argc, char*argv[]); //main可以带参数并在程序中直接使用。(2)函数参数argc:命令行参数的个数(包含命令本原创 2016-03-28 09:07:18 · 626 阅读 · 0 评论 -
Linux C高级编程——文件操作之系统调用
Linux C高级编程文件操作之系统调用宗旨:技术的学习是有限的,分享的精神的无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准。使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性。 系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,原创 2016-03-28 09:09:46 · 4122 阅读 · 0 评论 -
Linux下libxml2编程基础
libxml2编程基础一、libxml2的简介 xml是一个实现读、创建、以及操作xml数据功能的C语言库。并且支持XPATH查询,以及部分的支持XSLT转换等的功能。 libxml2的下载地址为ftp://xmlsoft.org/libxml2/,完全版的库是开源的,并且带有例子的程序和说明文档。有rpm包格式,也有tar包的形式,可以下载下来自己编译安装。原创 2016-08-29 09:08:45 · 990 阅读 · 0 评论 -
Linux下打印调试管理
#ifndef _DEBUG_MANAGE_H_#define _DEBUG_MANAGE_H_/* 信息的调试级别,数值起小级别越高 */#define APP_EMERG "" /* system is unusable */#define APP_ALERT "" /* action must be taken immediately */#define APP_原创 2016-08-31 09:45:05 · 730 阅读 · 0 评论 -
Linux CAN通信
Linux CAN通信 实现了Linux下的CAN通信——初始化,发两个送和接收(采用队列形式),使用两个线程,还有一个超时响应目前未写。接收部分使用select实现。#ifndef _CAN_H_#define _CAN_H_#include #include #include #include #include #include #include原创 2017-07-19 09:31:02 · 5473 阅读 · 0 评论 -
Linux epoll
Linux epoll事件触发一、什么是epoll epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linuxkernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O原创 2017-01-04 10:38:47 · 728 阅读 · 0 评论 -
Linux poll
Linux pollpoll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。1、函数原型 #include int poll(struct pollfd fd[], nfds_t nfds, int timeout);2、函数参数:(1)fd:一个结构数组,struct pollfd结构如下:struct pollfd{ int原创 2016-12-22 08:46:13 · 682 阅读 · 0 评论 -
Linux Select
Linux Select在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) •我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不...原创 2016-12-21 11:57:10 · 977 阅读 · 0 评论 -
检测ARM板的RTC
#include #include // 可以测试ARM板的RTC是不是好的void GetLocalTime(void){ time_t now; struct tm *timenow; time(&now); timenow = localtime(&now); printf("Local time is = %s", asctime(timenow));}原创 2016-08-24 12:14:25 · 579 阅读 · 0 评论 -
Linux下获取文件编译的时间
#include #define MONTH_PER_YEAR 12 // 一年12月#define YEAR_MONTH_DAY 20 // 年月日缓存大小#define HOUR_MINUTES_SEC 20 // 时分秒缓存大小void GetCompileTime(void){ const char year_month[MONTH_PER_YEAR]原创 2016-08-23 14:48:30 · 5430 阅读 · 0 评论 -
内核链表list.h文件剖析
内核链表list.h文件剖析一、内核链表的结构【双向循环链表】 内核链表的好主要体现为两点,1是可扩展性,2是封装。可以将内核链表复用到用户态编程中,以后在用户态下编程就不需要写一些关于链表的代码了,直接将内核中list.h中的代码拷贝过来用。struct list_head{ struct list_head *next, *prev;}; // 包含了两个指向list原创 2016-09-01 11:16:01 · 1383 阅读 · 0 评论 -
Linux下XPath对xml解析
#ifndef CONF_XML_H#define CONF_XML_H// xml文件在上一篇博客的注释部分有#include #include #include #include #include #include #include #include #define ROOT "root" //根节点#define SON_1 "can0" //儿子节点1#def原创 2016-09-01 09:19:55 · 2131 阅读 · 0 评论 -
Linux C高级编程——文件操作之库函数
Linux c高级编程——文件操作之库函数宗旨:技术的学习是有限的,分享的精神的无限的——为什么要设计标准I/O库?直接使用API进行文件访问时,需要考虑许多细节问题例如:read、write时,缓冲区的大小该如何确定,才能使效率最优标准I/O库封装了诸多细节问题,包括缓冲区分配 ——标准I/O库缓冲标准I/O库提供缓冲的目的:尽可能减少使用re原创 2016-03-28 14:05:27 · 1617 阅读 · 0 评论 -
fprintf/fscanf函数分析
fprintf/fscanf函数分析宗旨:技术的学习是有限的,分享的精神的无限的。fprintf/fscanf函数与printf/scanf区别:printf/scanf专门针对标准输入输出流,fprintf/fscanf函数可用于任意流,包括输入输出流。1、fprintf——将输出按指定格式放置在指定的输出流上。(1)函数原型int fprintf(F原创 2016-03-29 08:48:31 · 856 阅读 · 0 评论 -
Shell脚本
Shell脚本宗旨:技术的学习是有限的,分享的精神的无限的。一、shell简介Shell的作用是解释执行用户的命令,用户输入一条命令, Shell就解释执行一条,这种方式称为交 互式( Interactive),Shell还有一种执行命令的方式称为批处理( Batch),用户事先写一 个Shell脚本( Script) ,其中有很多条命令,让Shell一次把这些命令原创 2016-04-02 09:03:01 · 1277 阅读 · 0 评论 -
进程间通信——信号
进程间通信——信号宗旨:技术的学习是有限的,分享的精神的无限的。一、信号和中断1、信号基本概念(1)发送信号:产生信号,有多种发送信号的方式【一个进程到另一个进程,内核向用户,进程向自己】(2)安装信号:设置信号到来时不再执行默认操作,而是执行自定义的代码。(3)递送信号:一个信号被操作系统发送到目标进程引起某段处理程序的执行。(4)捕获信号:被递送原创 2016-04-02 10:41:01 · 1821 阅读 · 0 评论 -
LinuxC高级编程——线程
LinuxC高级编程——线程宗旨:技术的学习是有限的,分享的精神的无限的。一、线程基础 main函数和信号处理函数是同一个进程地址空间中的多个控制流程,多线程也是如 此,但是比信号处理函数更加灵活,信号处理函数的控制流程只是在信号递达时产生,在处理完信 号之后就结束,而多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在 多个进程之间原创 2016-04-03 17:00:11 · 1132 阅读 · 0 评论 -
Linux C高级编程——网络编程基础(1)
Linux高级编程——BSD socket的网络编程宗旨:技术的学习是有限的,分享的精神的无限的。一网络通信基础 TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是因为TCP/IP包含TCP 、IP、UDP、ICMP等多种协议。下图是OSI模型与TCP/IP模型的对比,TCP/IP将网络划分为4层模型:应用层、传输层、网络层和网络接口层(有些原创 2016-04-04 12:24:44 · 4464 阅读 · 0 评论 -
Linux C高级编程——网络编程之以太网(2)
Linux网络编程——以太网技术的学习是有限的,分享的精神是无限的。1、以太网(RFC 894)帧格式源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。用ifconfig命令查看,“ 硬件地址 00:0c:29:cf:7e:1a ” 。协议字段有三种值,分别对应IP、 ARP、 RARP。帧末尾是CRC校验码。ARP和RA原创 2016-04-04 15:25:41 · 3883 阅读 · 0 评论 -
LinuxC高级编程——线程间同步
LinuxC高级编程——线程间同步宗旨:技术的学习是有限的,分享的精神的无限的。1、 互斥锁mutex 多个线程同时访问共享数据时可能会冲突。对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex, Mutual Exclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得 锁的线程原创 2016-04-03 22:32:26 · 1079 阅读 · 0 评论 -
Linux C高级编程——网络编程之API(5)
Linux C网络编程(3) 宗旨:技术的学习是有限的,分享的精神的无限的。 一、基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个原创 2016-04-06 08:55:09 · 2298 阅读 · 0 评论 -
Linux C高级编程——网络编程之UDP(4)
Linux网络编程——UDP宗旨:技术的学习是有限的,分享的精神是无限的。下面分析一帧基于UDP的TFTP协议帧。以太网首部0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00IP首部0000: 45 000010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a8原创 2016-04-05 08:47:23 · 1261 阅读 · 0 评论 -
Linux C实现简单的shell
Linux C下实现简单的Shell宗旨:技术的学习是有限的,分享的精神的无限的。【需求描述】用各种C函数实现一个简单的交互式Shell:1、给出提示符,让用户输入一行命令,识别程序名和参数并调用适当的exec函数执行程序,待执行完成后再次给出提示符。2、识别和处理以下符号:简单的标准输入输出重定向( 和>),先dup2然后exec。管道(|): She原创 2016-04-02 09:00:23 · 5779 阅读 · 0 评论 -
who|sort实现
who|sort实现宗旨:技术的学习是有限的,分享的精神的无限的。 创建无名管道,执行who命令的进程将输出重定向到管道的写端;执行sort命令的进程将输入重定向到管道的读端。即who的输出连接到sort的输入。#include #include #include #include #include #include #define PI原创 2016-04-02 08:57:12 · 1518 阅读 · 0 评论 -
Linux C高级编程——目录操作
Linux C目录操作宗旨:技术的学习是有限的,分享的精神是无限的。 Linux思想“一切皆文件”,目录也是文件,只是存储的内容有别于普通文件。目录文件中存储的该目录下所有的文件及子目录文件的信息,inode节点。一、打开/关闭目录文件1、 opendir——打开目录(1)函数原型#include <dirent.h>...原创 2016-03-29 08:49:16 · 1414 阅读 · 0 评论 -
文件流、目录流、文件描述符总结
文件流、目录流、文件描述符总结宗旨:技术的学习是有限的,分享的精神的无限的。 内核为使当前进程与进程打开的文件建立联系,在进程PCB(一个结构体task_struct)中使用一个成员来指向关于打开文件列表的结构体struct file_struct,而该结构体中的struct file *fd_array[]是一个指针数组,指向每个打开的文件信息。内核将这原创 2016-03-29 15:22:07 · 2672 阅读 · 0 评论 -
ext2文件系统
ext2文件系统宗旨:技术的学习是有限的,分享的精神的无限的。一、总体存储布局 一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格 式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的 信息。 文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时原创 2016-03-30 08:43:15 · 1338 阅读 · 0 评论 -
Linux文件系统及属性
Linux文件系统及属性宗旨:技术的学习是有限的,分享的精神的无限的。一、Linux系统下文件类型及属性1、inode结构/*索引节点对象由inode结构体表示,定义文件在linux/fs.h中*/struct inode{ struct hlist_node i_hash; /* 哈希表 */ struct l原创 2016-03-30 08:44:21 · 929 阅读 · 0 评论 -
Linux C语言实现ls -l
使用系统调用使用Linux下ls -l命令。最后的Makefile是通用的Makefile,可以直接使用。原创 2016-03-31 09:15:42 · 7253 阅读 · 0 评论 -
LinuxC高级编程——进程
LinuxC高级编程——进程宗旨:技术的学习是有限的,分享的精神的无限的。 每个进程在内核中都有一个进程控制块( PCB)来维护进程相关的信息, Linux内核的 进程控制块是task_struct结构体。PCB包含的信息:(1)进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整 数。(2)进程的状态,有运行、原创 2016-04-01 09:01:19 · 1197 阅读 · 0 评论 -
Linux C高级编程——时间编程
Linux高级编程——时间编程宗旨:技术的学习是有限的,分享的精神的无限的。1 时间类型(1) 世界标准世界(格林威治时间)(2) 日历时间(1970年1月1日0时)——到此时经历的秒数 2 时间获取#includetime_ttime(time_t *tloc)——获取日历时间/*typedef longtime_t*/ 3 时间转原创 2016-04-01 14:21:18 · 909 阅读 · 0 评论 -
进程间的通信——无名管道
进程间的通信——无名管道宗旨:技术的学习是有限的,分享的精神的无限的。一、进程间的通信(1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO)、消息队列和共享内存。无名管道多用于亲缘关系进程间通信,无名管道可用于任意同主机进程间通信,但管道是单向的,会出现同时读写问题。消息队列可以实现同主机上任意多进程间通信,但存放的数据量很有限,应用于少量的数据原创 2016-04-02 08:56:32 · 1160 阅读 · 0 评论 -
Linux C简单的web服务器
Linux C简单的web服务器目录Linux C简单的web服务器一、基础类型重命名二、包裹函数(wrap.h/wrap.c 主要是网络通讯和多线程的包裹函数)三、服务端程序(web_server.h/web_server.c)—— 使用EPOLL高并发机制四、HTTP解析(http.h/http.c写了...原创 2019-06-06 16:31:50 · 2767 阅读 · 1 评论