
Linux
文章平均质量分 67
写了程序换酒钱
Want to be a geek!!!
展开
-
linux 多进程知识
进程是针对系统而不是用户的,对于用户而言,其面对的是程序,当用户输入指令执行一个程序的时候,对系统而言它将启动一个进程,但是和系统不同的是,在这个进程中,系统可能需要再启动一个或者多个进程来完成独立的多个任务,多进程编程主要包括进程控制和进程间通信。 linux环境下进程结构: linux进程在内存中有三部分数据:代码段 数据段和堆栈段,在CPU都有上述三种段寄存器,以方便操作转载 2012-07-21 17:20:03 · 1184 阅读 · 0 评论 -
在内网架设一个可供外网登录的ftp服务器
ftp服务器是使用比较平常的服务器,但是IP资源是有限的,那么怎么让内网的服务器給外网的用户提供服务了?原创 2014-11-12 22:21:45 · 16188 阅读 · 0 评论 -
PHP得到POST上来的JSON数据
$post_data = $GLOBALS['HTTP_RAW_POST_DATA'];$josn_data = json_decode($post_data, true);原创 2015-02-02 22:04:39 · 3007 阅读 · 0 评论 -
在Qt5的QML中使用QZXing识别二维码
前言ZXing库是一个用来识别二维码的库,QZXing是一个基于Qt的Qt wrapper library,在本文我们使用它和qml开发一个android小应用。添加QZXing项目QZXing最常用是作为一个子项目包含在我们的项目中,在我们的项目的pro文件中添加如下的一句:include(./QZXing/QZXing.pri)QZXing和我们的pro文件在同一个目录。qml程序import原创 2015-03-11 18:48:16 · 9496 阅读 · 13 评论 -
基于epoll的聊天室程序
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平出发和边沿触发。 用张图来说明下 ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,原创 2013-07-13 20:44:31 · 3985 阅读 · 0 评论 -
epoll和input子系统实现input事件分发
前言在嵌入式开发中,按键和触摸板等输入系统很常见,其驱动文件位于/dev/input下,以event开头,后接数字。epoll是2.6内核引入的I/O多路复用的新的高效的接口,我在以前的博客中,使用其实现了一个聊天室服务器程序。这里我们使用其来监控input子系统事件。 在嵌入式软件开发中,小的程序,我们可以直接使用I/O接口来获得外部的时间输入,而如果对于一个大型的嵌入式软件系统,其会被很多地方原创 2015-05-21 23:16:54 · 2386 阅读 · 0 评论 -
基于boost.asio的echo服务器2
在多处理器普及的现在,服务器程序会充分使用计算机多核的能力,比如nginx的master-worker多进程模式,那么今天我们就在1的基础上来通过多线程来使用多核。 进程和线程数不是越多越好,一般不要超过CPU核数的2倍。io_service是asio的事件循环,那么多线程就是几个io_service在各自的线程运行,这里我们使用io_service_pool类管理他们。#define CPUS原创 2015-09-12 12:11:16 · 1255 阅读 · 0 评论 -
基于boost.asio的ECHO服务器
基于boost.asio的ECHO服务器前沿从大二开始就对服务器开发,感兴趣,从Qt的QTcpServer和QTcpSocket到使用linux的epoll。后来有因为工作搞了一个nginx和php做app后台,后来想找个游戏服务器方面的工作,可是人家嫌你没开发经验,当时我毕业还没一年,能有多少锤子经验。问我熟悉boost.asio库吗,我说知道,没用过,然后就没有然后啦。老老实实做嵌入式开发。ec原创 2015-08-29 20:11:16 · 2012 阅读 · 1 评论 -
Yotoc Project快速指南
原文路径:http://www.yoctoproject.org/docs/1.8/mega-manual/mega-manual.html1.欢迎欢迎来到Yocto项目!Yocto项目是一个专注于嵌入式Linux开发者的开源协作项目。在其他方面,Yocto项目使用一个基于OpenEmbedded项目的编译系统,这个编译系统使用BitBake工具来构造完整的linux系统镜像。BitBake和OE的翻译 2015-10-19 14:47:45 · 7213 阅读 · 2 评论 -
lvs负载均衡
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server v转载 2012-10-05 22:53:30 · 980 阅读 · 0 评论 -
基于boost.asio的echo服务器3
外包公司赶项目拿人当狗用,fuck!上次2是给list加了层锁,这里为每个io_service都分配一个list来减少竞争。class TestEchoServer2 : public boost::enable_shared_from_this<TestEchoServer2> , private boost::noncopyable{public: TestEchoS原创 2015-09-18 22:48:08 · 1203 阅读 · 0 评论 -
container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t转载 2013-07-27 09:45:11 · 807 阅读 · 0 评论 -
中断处理
查看设备状态有两种方式,一种是轮询,一种是中断,可是轮询代价太大,如果是简单的系统,处理的时间单一,比如只有一个按键操作,那么可以轮询,如果是操作系统的,则是对响应来说是灾难性的。中断的引入是由I/O操作的不确定性以及与CPU之间的速度矛盾。设备通过某种硬件信号来异步地唤起CPU的注意,说明中断的到来,是否处理。这些硬件的信号就是中断。每个中断设备都被分配一个相关的标识符,被称为中断请求(IR原创 2013-07-18 07:47:10 · 1181 阅读 · 0 评论 -
linux 多进程编程基础
一 linux下进程的理解: linux环境下一个进程在内存中有三部分数据:数据段 堆栈段和代码段 代码段:就是存放程序代码的数据,如果有数个进程运行一个程序,那么他们就可以使用同一个代码段 堆栈段:存放的是子程序的返回地址 参数以及程序的局部变量 数据段:存放程序的全局变量 常数以及动态数据分配的数据空间 系统如果同时运行数个相同的程序,他们之间转载 2012-07-21 17:17:01 · 1655 阅读 · 0 评论 -
linux文件操作
在linux下的文件I/O操作主要用到这几个函数: open(),read(),write(),lseek(),close(),这些函数是不带缓存的,是直接对文件进行读写操作。 这里参数都没给出来,详细可以查资料。 open用于打开一个文件,read是读取,wi原创 2012-09-20 21:22:29 · 703 阅读 · 0 评论 -
Linux 文件锁
在文已经共享的情况下如何操作,也就是当多个进程同时操作同一个文件时,我们怎么保证文件数据的正确性。linux通常采用的方法是文件上锁,来避免共享资源的产生竞争状态。 文件锁包括建议性锁和强制性的锁。建议性的,顾名思义,相对温柔一些,在对文件进行锁操作时,会检测是否已经有锁存在,并且尊重已有的锁。在一般的情况下,内核和系统都不使用建议锁。强制性的锁是由内核执原创 2012-09-21 17:42:08 · 22595 阅读 · 4 评论 -
I/O多路转接模型
在这种模型下,如果请求的I/O操作阻塞,但它不是真正阻塞I/O,而是让其中的一个函数等待,在这期间,I/O还能进行其他的操作。在linux下,主要使用select()和poll()函数来实现。 select()说明: int select(int maxfdp,fd_set *readfds,fd_set *wr原创 2012-09-22 18:16:20 · 1538 阅读 · 0 评论 -
Linux串口编程(1)
串行通信是利用一条传输线以比特为单位顺序传送。特点是通信线路简单,一般电缆就可以实现串口通信,适合于长距离且速度较慢的数据通信。串口是计算机上比较常见的接口,一般为RS—232—C接口。串口的配置参数一般包括波特率,起始位比特数,数据位比特数,停止位比特数和流控模式。 串口的设置主要是设置结构体termios的各成员值。 #include原创 2012-09-23 22:08:19 · 927 阅读 · 0 评论 -
linux管道
管道是单向的字节流,它将某个进程的标准输出连接到另一个进程的标准输入。管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。管道和有名管道的读写规则是在程序中应用它们的关键。 管道相关的概念 在linux中管道是通过指向同一个临时的VFS inode的两个file数转载 2012-09-24 19:18:14 · 1171 阅读 · 0 评论 -
Linux串口编程(2)
该结构体中c_cflag最为重要,可设置波特率、数据位、校验位、停止位。在设置波特率时需要在数字前加上'B'。c_lflag成员ISIG 当接收到字符INTR,QUIT,SUSP或DSUSP时,产生相应的信号。XCASE (不属于POSIX;LINUX下不支持)如果同时设置了ICANON,终端只有大写。输入被转换为小写,除了以/前缀的字符。输出时,大写字符被前缀/,原创 2012-09-24 18:43:51 · 1118 阅读 · 0 评论 -
内核启动过程
以x86体系结构的计算机为例 第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB,LILO或SYSLINUX等引导装入程序(Bootloader),之后引导装入程序会加载压缩后的内核映像并将控制权传递给内核。内核获得控制权后,会将自身解压并投入运行。x86的cpu有两种操作模式:实模式和保护模式。在实模式下,用原创 2013-07-11 15:33:52 · 1072 阅读 · 0 评论 -
内核定时器
内核中的许多部分的工作都高度依赖与时间信息。Linux内核利用硬件提供的不同的定时器以支持忙等待和睡眠等待等时间相关的服务。所谓忙等待,就是cpu不停的运转。但是睡眠等待,进程将放弃cpu。所以,只有在睡眠等待不可行的情况下,才考虑使用忙等待。内核也提供了相关的api,使可以在一段时间之后调用某函数运行。在内核中存在这一些重要的与定时器相关的变量。HZ和Jiffies系统定时器能以可编程的原创 2013-07-14 07:09:57 · 1057 阅读 · 0 评论 -
linux字符设备驱动程序的编写
在此涉及到两个重要的结构体cdev和file_operations,前者为描述字符设备,后者为设备驱动程序的入口点。对与file_operations的成员描述请看 file_operations中各项解析我用图表示下在内核2.6版本后新版本的字符设备注册上图这是驱动程序应该做的,但是要真正地使用它,我们还必须还要创建设备节点(linux的设备操作都是标准的文件操作,就是当作文原创 2013-06-29 23:09:40 · 3475 阅读 · 0 评论 -
内核并发处理
随着硬件的发展,SMP(对称多处理器)已经很普遍,如果内核的调度机制是可抢占的,那么SMP和内核抢占是多线程执行的两种场景。当多个线程同时访问内核的数据结构时,我们就需要对其做串行化处理。自旋锁和互斥体访问共享资源的代码区称为临界区。自旋锁(spinlock)和互斥体(mutex, mutual exclusion)是保护内核临界区的两种基本机制。自旋锁可以确定在同时只有一个线程进入临原创 2013-07-15 16:54:43 · 1302 阅读 · 0 评论 -
工作队列
工作队列是内核中用于进行延后工作的一种方式。延后工作在很多地方使用到,比如1.1个错误中断发生后,触发网络适配器重新启动;2.同步磁盘缓冲区的文件系统任务;3.给磁盘发送一个命令,并跟踪存储协议状态机。等等工作队列辅助库向用户提供了两个接口结构:workqueue_struct和work_struct,使用工作队列的步骤如下1.创建一个工作队列(或一个workqueue_str原创 2013-07-16 15:48:41 · 1127 阅读 · 0 评论 -
基于TCP协议的视频传输
这个程序是为了大二上学期一个设计作业,写的原创 2014-10-12 12:31:33 · 10171 阅读 · 12 评论