Linux点点滴滴
Linux
浪游东戴河
专注于SIP/VoIP协议、音视频、Linux C/C++网络编程等领域,长期提供技术咨询、问题解答、软件开发、知识讲座等服务
学无止境,习有所长,没有终点,永不放弃
展开
-
Linux Makefile中一些参数说明
参数含义:< :第一个依赖文件@ :目标文件的名称^ :依赖文件(不重复)* :目标文件的名称,不包含文件的扩展名? :修改过的依赖文件+ :所有的依赖文件(包含重复)Makefile:all.o: a.c b.c b.c @echo "\$$@:"$@ @echo "\$$*:"$* @echo "\$$+:"$+ @echo "\$$<:"$< @echo "\$$^:"$^...原创 2020-11-26 11:10:51 · 217 阅读 · 0 评论 -
Linux Makefile的一些用法
一、介绍本文用实例介绍Makefile的一些使用规则和用法二、一些用法1. 宏定义使用A:宏定义-D DEBUG-D DEBUG=[value]CFLAGS=hello world1 + 9 = 10CFLAGS=-D DEBUGhello world1 + 9 = 10Debug is definedDebug is defined as trueCFLAGS=-D DEBUG=1hello world1 + 9 = 10Debug is define原创 2020-11-26 11:02:41 · 244 阅读 · 0 评论 -
Linux Sqlite基本操作
安装sqlite3(ubuntu)命令apt-get install sqlite3打开数据库#sqlite3 my.db查看数据库sqlite>.database查看建表语句sqlite>.schema mytable退出sqlite>.quit原创 2020-06-18 14:46:30 · 214 阅读 · 0 评论 -
Linux epoll机制简单实例
server.c:#include #include #include #include #include #include #include #include #include #include #include #define SERVER_IP "127.0.0.1"#define SERVER_PORT 8000#define MAX_RECV_LEN 10原创 2016-02-15 22:44:16 · 606 阅读 · 0 评论 -
Linux Bash基本知识
Bash是Linux系统中非常有用的脚本语言,是运维管理中重要的工具,对于程序员来说也是非常有用的助手。常用的场景有:主机环境配置,程序/服务的启动,批量作业等。Bash脚本在linux终端创建过程:1. 新建 example.sh, 输入如下内容#!/bin/bashecho "hello world"2. 赋予可执行权限chmod 777 example.sh原创 2016-02-04 22:21:10 · 468 阅读 · 0 评论 -
Linux C判断两个IPv6地址是否相等的方法
IPv6地址用冒号和16进制数表示,其中遇到连续的0可以作省略处理,如2001:0:0:0:0:0:0:1可以写成2001::1,这样对于书写很方便,但是带来一个额外的问题:两个地址比较的时候不能像IPv4那样调用字符串比较函数进行比较。本文通过比较两个IPv6地址的网络字节序来判断是否相等。#include #include int ipv6_equal(char *addr1原创 2016-02-21 10:05:36 · 4261 阅读 · 0 评论 -
Linux c 操作Mysql简单实例
在大型软件编程中,数据库是必不可少的,通常需要通过各种编程语言访问和操作数据库。本文介绍了在Linux 下使用C语言去操作Mysql数据库的方法。还有很重要的一点是: 在编程中,使用基础API操作数据库会比较复杂,不实用,软件开发者通常会在原有基础上抽象出一组使用更方便的API接口,本文也作了简单的抽象API(函数),如top_XX_XX()函数,仅供学习。1. 首先在命令行通过SQL原创 2016-02-28 10:05:48 · 933 阅读 · 0 评论 -
linux消息队列简析
消息队列提供了一种在两个不相关的进程之间传递数据的相当简单且有效的方法:消息发送端代码:#include #include #include #include #include #include #include #include int message_id;struct my_message{long in原创 2013-09-19 10:10:48 · 1006 阅读 · 0 评论 -
Linux 动态库、静态库的生成、使用和优缺点分析
一、介绍在软件编程中,通常会把功能或接口函数封装成库的形式,供给其它模块或第三方使用。在linux系统中存在动态库和静态库两种形式。静态库:以libxxx.a形式命名,编译程序时,会将静态库数据编译进可执行程序中。动态库:以libxxx.so形式命名,编译程序时,不会被编译进可执行程序中,而在程序运行时,动态的加载该动态库二、生成(以libmath_method.a/so为例)...原创 2018-08-09 18:57:10 · 279 阅读 · 0 评论 -
通过实例介绍Linux编程中 Makefile的一些规则和用法
一、介绍本文用实例介绍Makefile的一些使用规则和用法二、一些用法1. 宏定义使用A:宏定义-D DEBUG-D DEBUG=[value]CFLAGS=hello world1 + 9 = 10CFLAGS=-D DEBUGhello world1 + 9 = 10Debug is definedDebug is defined as true...原创 2018-08-10 18:56:29 · 254 阅读 · 0 评论 -
Linux select TCP并发服务器与客户端编程
Linux C语言 TCP并发服务器 select 服务器端代码:#inc原创 2013-08-29 23:07:47 · 10628 阅读 · 5 评论 -
linux popen函数简单实例
Linux 中的popen机制可以在程序中执行一个shell命令,有两种操作模式,分别为读和写。在读模式中,程序中可以读取到命令的输出,其中有一个应用就是获取网络接口的参数。在写模式中,最常用的是创建一个新的文件或开启其他服务等。#include #include #define BUF_SIZE 1024char buf[BUF_SIZE];int main(void)原创 2016-01-30 09:58:06 · 7412 阅读 · 0 评论 -
linux信号量简单应用
#include #include #include #include #include //由于头文件中没有联合体变量,只能自己定义,如果有,则不需要此定义union semun{ int val;};//操作函数:设置,操作P,操作Vstatic int set_semvalue(void);static int s原创 2013-04-14 09:51:11 · 570 阅读 · 0 评论 -
Linux数据链路层的访问
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 13 14 int main(void) 15 {原创 2013-07-30 13:22:22 · 1166 阅读 · 0 评论 -
Linux内核模块编程之helloworld
#include #include MODULE_LICENSE("Dual BSD/GPL"); //许可static int hello_init(void){printk(KERN_ALERT"Hello world\n");}static void hello_exit(void){printk(KERN_ALERT"exit Hell原创 2013-08-11 13:22:22 · 553 阅读 · 0 评论 -
Linux策略路由基础
策略路由策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的。例如我们可以有这样的策略:“所有来直自网A的包,选择X路径;其他选择Y路径”,或者是“所有TOS为A的包选择路径F;其他选者路径K”Linux最多可以支持255张路由表,其中有3张表是内置的:存在文件/etc/iproute2/rt_tables中 表255 本地路由表(Local t转载 2013-08-13 10:00:42 · 764 阅读 · 0 评论 -
Linux安装系统调用表更改模块时系统崩溃(unable to handle kernel paging request at XX)
安装内核模块时,如果里面有更改系统调用等情况,有时会崩溃,出现如下错误:BUG:unable to handle kernel paging request at virtual address c06357b4printing eip:d0aac056 *pde = 0e9dd163 *pte = 00635161 Oops: 0003 [#1] SMP Modules li原创 2013-08-14 19:49:39 · 8464 阅读 · 3 评论 -
unix domain socket 进程间通信简析
Linux系统有多种进程间通信方式,如信号、消息队列、管道等,socket是其中一种,socket使用unix domain 模式进行进程间通信//服务端代码#include #include #include #include #include #define UNIX_SERV "/tmp/unix_serv" //文件路径名int原创 2013-09-09 21:16:35 · 2058 阅读 · 0 评论 -
linux共享内存简析
共享内存是IPC的一种机制,允许两个不相关的进程共享同一块内存//共享内存可以双向通信,但其本身没有相应机制,需要程序编写者设计,本例为单向通信(分为读端和写端)。共享内存读端:#include #include #include #include #include #include //自定义数据结构,flag为同步机制标志:flag 为1表示读端原创 2013-09-19 22:56:51 · 945 阅读 · 0 评论 -
IP报文中的校验和函数实现
//本函数 为CRC16校验//data为数据地址,len为长度static int icmp_cksum(void *data, int len){int nleft = len;uint16_t *data_tmp = (uint16_t *)data; int sum = 0; //校验和存储变量uint16_t tmp = 0;/原创 2013-10-19 22:35:30 · 1979 阅读 · 0 评论 -
Linux线程池使用实例
tpool.h#ifndef _THREAD_POOL_H#define _THREAD_POOL_Hstruct job{void* (*callback_function)(void *arg); //绾跨▼鍥炶皟鍑芥暟void *arg; //鍥炶皟鍑芥暟鍙傛暟struct job *next;转载 2014-05-18 11:43:21 · 1687 阅读 · 0 评论 -
Linux下程序单例模式的保证机制:/var/run/*.pid
在Linux 系统中/var/run下有很多以pid结尾的文件,这个其实是为了保证程序以单例模式运行而设计的。程序在启动后,首先打开(如果没有则创建)/var/run/xx.pid,然后尝试去设置文件锁,如果成功,则将程序的里程ID写入该文件,写入后注意不要关闭文件或解锁;如果加锁失败,表明程序已经有一个进程在运行了,则退出此次启动。此机制在一些程序尤其是服务器程序中很常见,例如sip 服务器ka原创 2016-02-05 22:25:32 · 4322 阅读 · 0 评论 -
Linux应用程序使用的系统时间
#include #include int main(void){ int time; struct timespec res; while(1) { clock_gettime(CLOCK_REALTIME, &res); pri原创 2013-03-31 22:56:49 · 692 阅读 · 0 评论