linux应用程序设计
c1194758555
这个作者很懒,什么都没留下…
展开
-
交叉编译libusb和libusb-compat-0.1.5
1. 下载libusb库:https://jaist.dl.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.22/libusb-1.0.22.tar.bz22. 编译安装libusb:tar -xvf ./libusb-1.0.22.tar.bz2cd ./libusb-1.0.22mkdir build./configure...原创 2020-01-18 10:19:18 · 1263 阅读 · 3 评论 -
udp打洞原理
UDP打洞的过程大致如此: 1、双方都通过UDP与服务器通讯后,网关默认就是做了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的,服务器也不需要知道客户的真正内网IP 2、用户A先通过服务器知道用户B的外网地址与端口 3、用户A向用户B的外网地址与端口发送消息, 4、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。 5、但是用户A的网关就会增加了一条...转载 2018-07-14 16:16:15 · 2553 阅读 · 0 评论 -
linux c 编程之 udp
客户端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <netinet/in.h>#incl...原创 2018-07-10 18:31:59 · 226 阅读 · 0 评论 -
线程定时器
名称 timer_create - create a POSIX per-process timer摘要 #include #include int timer_create(clockid_t clockid, struct sigevent *sevp, timer_t转载 2018-01-09 09:26:03 · 1017 阅读 · 0 评论 -
多线程下变量-原子操作
最近编码需要实现多线程环境下的计数器操作,统计相关事件的次数。下面是一些学习心得和体会。不敢妄称原创,基本是学习笔记。遇到相关的引用,我会致谢。 当然我们知道,count++这种操作不是原子的。一个自加操作,本质是分成三步的: 1 从缓存取到寄存器 2 在寄存器加1 3 存入缓存。 由于时序的因素,多个线程操作同一个全局变量,会出现问题。这也翻译 2018-01-08 15:54:49 · 993 阅读 · 0 评论 -
linux系统中的实时信号
标准信号的局限性:1. 阻塞信号可能会丢失。当一个信号阻塞时,这个信号即使多次发送给进程,也被执行一次信号句柄。2. 信号交付没有携带与信号有关信息。接受到信号的进程无法区分同种信号的不同情况,也不知道信号从何而来。3. 信号的交付没有优先级。当有多个信号悬挂与一个进程时,交付的顺序不确定。实时信号对标准信号做了一下扩充,有以下的特点:1.增加了信号从SIGRTMIN到SIGR原创 2016-10-19 10:41:22 · 3284 阅读 · 1 评论 -
linux系统中多线程同步之互斥变量、读写锁、条件变量
多线程应用在协同完成一个任务时既有分工有用协作,协作涉及数据交换、共享资源的访问及线程执行顺序的控制,分工可以并发执行,协作则需要同步的控制。在多线程中最基本的同步有互斥执行、条件同步、栅栏同步。互斥变量用于多线程竞争访问某一共享资源,读写锁支持线程对共享数据的共享读互斥写,互斥变量给线程提供了互斥访问共享数据的手段它可以保证对共享数据访问的一致性。1.互斥变量1.1 互斥变量的初始化原创 2016-11-14 17:23:34 · 1494 阅读 · 0 评论 -
linux系统中的进程通信(消息队列、共享内存、信号量)
消息队列:类似与管道只能单项通信,消息队列由消息组成,消息可以有不同的数据结构,也可以由有优先级,能够更加灵活的通 信。消息队列使用int msgget(key_t key,int flags)获得或创建消息队列,使用void msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg);发送消息,使用size_t msgrcv(int ms原创 2016-09-12 15:22:45 · 654 阅读 · 0 评论 -
linux系统中的IO操作
同步IO分为阻塞IO、非阻塞IO、信号驱动的IO和多路转接IO。阻塞IO:一直阻塞进程直到完成IO操作。非阻塞IO:有数据时进行IO操作,没有数据时立即返回不阻塞进程。信号驱动IO:当有数据到来是发送信号给进程执行IO操作,提高CPU的利用率。当设置打开文件描述字O_ASYNC标志是可以用于信号驱动的IO操作,也可以用过fcntl()改变文件标签,当文件进行IO操作原创 2016-10-22 19:39:32 · 1726 阅读 · 0 评论 -
linux系统中的setjmp()和longjmp()函数
1. 作用:setjmp()和longjmp() 可以实现非局部控制转移即从一个函数到另外一个函数的跳转。2. 函数原型:#include int setjmp(jmp_buf env);void longjmp(jmp_buf env);setjmp函数设置返回点,保存调用函数的栈环境与env中(相当于保护现场)。longjmp的作用使用setjmp保存在env中的栈环境信息原创 2016-10-10 18:26:59 · 4746 阅读 · 0 评论 -
linux系统中的信号处理
1.1信号的概念信号:信号是异步传送给进程的时间通知,进程无法准确地预测合适会出现信号。同步信号:程序中的某个具体的操作相关并且在那个操作进行的同时产生。异步信号:进程之外的事件产生的信号。当信号发生时进程采取的动作:1)忽略信号。2)捕获信号。3)执行系统默认动作。1.2 kill( )函数#include int kill(pid_t pid, int s原创 2016-09-08 10:43:14 · 715 阅读 · 0 评论 -
CD管理系统(Shell)
参考《linux程序设计(第四版)》#!/bin/bashmenu_choice=""current_cd=""title_file="title.cdb"tracks_file="tracks.cdb"temp_file=./temp/cdb.$$trap 'rm -f $temp_file' EXITget_return(){ echo -n "press r原创 2016-08-28 20:58:07 · 927 阅读 · 0 评论 -
linux系统中进程通信(套接字2)
服务器端:#include #include #include #include #include #include #include #include #define Max 255int makeSocket(int type,unsigned int port){ int socketId; struct sockaddr_in name; if原创 2016-09-22 19:50:05 · 419 阅读 · 0 评论 -
linux系统中的进程通信(套接字)
套接字不仅支持本地无关的两个进程之间的双向通信,而且支持跨网络的,运行在不同机器的进程间的通信。可以通过int socket(int domain,int type,int protocol)建立套接字,通过int close(int socket)关闭(销毁)套接字,通过int shutdown(int socket,int how)断开套接字的连接。建立套接字#include i原创 2016-09-16 15:31:34 · 1289 阅读 · 0 评论 -
linux系统中的进程通信(管道和有名管道)
进程通信:多个进程需要协调工作,需要进行数据的交换。管道:是unix中进程通信的一种方式,管道的一端连接着输入另一段连接这数据的输出。管道(无名管道):用于父子进程之间的通信。有名管道:由于不同进程之间的通信。匿名管道:#include int pipe(int fdes[2]) /*创建匿名管道*/fdes:管道的输入、输出端的描述字。成功时返回 0,失败时返回原创 2016-09-10 15:25:41 · 301 阅读 · 0 评论 -
编写Makefile文件常用的三个变量
在Makefile文件的编写中经常使用到$@、$^和$$@:目标$^:所有依赖文件$在Makefile中的使用,例如:obj = start.o init.o uart.o main.o uart.bin:$(obj) arm-linux-ld -Tuart.lds $^ -o uart arm-linu原创 2016-08-22 16:18:38 · 413 阅读 · 0 评论 -
shell编程基础
1.熟悉shell1.1 基本语法# ! /bin/bashshell必须以上面所示的开头,以#开头的语句表示注释。1.2 添加可运行权限chmod u+x 文件名1.3 创建简单的shell# !/bin/bashecho -n "hell .$USER,today is "dateecho "good lucky!"2.变量2.1 用户定义的变原创 2016-08-22 16:28:18 · 300 阅读 · 0 评论