linux 编程
文章平均质量分 85
sukhoi27smk
学习是为了探索这个世界的本质
展开
-
epoll怎么实现的
epoll 可以说是编写高性能服务端程序必不可少的技术,在介绍 epoll 之前,我们先来了解一下 多路复用I/O 吧。多路复用I/O多路复用I/O:是指内核负责监听多个 I/O 流,当任何一个 I/O 流处于就绪状态(可读或可写)时都会通知进程,以便可以处理该 I/O 流上的数据。如 图1 所示:如 图1 所示,内核负责监听多个 I/O 流,当某些 I/O 流变为就绪状态,内核会把这些 I/O 流添加到就绪队列中,然后通知进程处理就绪队列中的 I/O 流。与传统的阻塞型 I/O 相比,转载 2021-06-04 09:48:39 · 214 阅读 · 0 评论 -
进程和线程
01什么是进程?标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。简单来说进程就是一个程序的执行流程,内部保存程序运行所需的资源。在操作系统中可以有多个进程在运行,可对于CPU来说,同一时刻,一个CPU只能运行一个进程,但在某一时间段内,CPU将这一时间段拆分成更短的时间片,CPU不停的在各个进程间游走,这就给人一种并行的错觉,像CPU可以同时运行多个进程一样,这就是伪并...转载 2021-06-02 18:59:22 · 297 阅读 · 0 评论 -
cygwin和mingw的区别
1、使用区别:cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器。cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用win32的)可以无缝的用在linux下,没有任何问题。是在window.转载 2021-02-23 13:00:30 · 3123 阅读 · 0 评论 -
网络编程模型综述 之 成熟的IO框架介绍
ACE“重量级的C++ I/O框架,用面向对象实现了一些I/O策略和其它有用的东西,特别是它的Reactor是用OO方式处理非阻塞I/O,而Proactor是用OO方式处理异步I/O的( In particular, his Reactor is an OO way of doing nonblocking I/O, and Proactor is an OO way of doing a转载 2013-10-24 15:39:13 · 1088 阅读 · 0 评论 -
领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型
领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型都是常用的客户-服务器编程模型。这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方:话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。假如发现有落单的过往客商,望风的山贼就会弄醒一个转载 2013-10-24 15:25:09 · 1921 阅读 · 0 评论 -
socketpair理解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liulixiaoyao.blog.51cto.com/1361095/533469 今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中转载 2013-10-18 15:47:34 · 669 阅读 · 0 评论 -
linux定时器
(1) struct itimerval struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; itimerval: i --> interval转载 2013-05-03 15:44:16 · 783 阅读 · 0 评论 -
Linux两种定时器
Linux下的定时器有两种,以下分别介绍: 1、alarm 如果不要求很精确的话,用alarm()和signal()就够了 unsigned int alarm(unsigned int seconds) 函数说明: alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的转载 2013-05-03 15:42:38 · 791 阅读 · 0 评论 -
Linux 定时器设置
函数alarm设置的定时器只能精确到秒,而以下函数理论上可以精确到微妙:#include #include int getitimer(int which, struct itimerval*value);int setitimer(int which, const structitimerval *value, struct itimerval *ovalue);函数seti转载 2013-05-03 15:34:13 · 659 阅读 · 0 评论 -
POSIX定时器
最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。 创建一个定时器:int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *t转载 2013-03-28 17:55:48 · 2309 阅读 · 0 评论 -
汉字区位码对照表
汉字区位码对照表a-beibei--cancan-chichi-dada-dongdong-feifei-gege-guoha-huanhuan-jiajia-jingjing-kaokao-langlang-linlin-maimai-momo-nunu-pingping-qieqie-r转载 2013-03-28 09:41:13 · 18261 阅读 · 0 评论 -
小字节序和大字节序
小字节序:(比如x86体系) 数据的低字节放在低地址处,比如一个整型数0x12345678,在内存中的 分布为: ----------- | 78 | xxxx_0000 ----------- | 5转载 2013-03-28 17:50:05 · 1491 阅读 · 0 评论 -
使用 rapidxml 做配置文件
对于配置文件,一般会选用ini,xml 等等的配置格式。如何快速高效的从文件内读取自己想要的信息是每个做配置文件想要达到的效果。对以小型开发我们并不用时用到msxml这种重量级的解析器。那样会给自己添麻烦的。这里我推荐大家使用rapidxml。之前使用tinyxml 感觉还可以。后看了rapidxml 就想换用这个开源库。经常编写跨平台软件省去编译和加载lib。4个文件实现解析xml而且超高效转载 2013-03-28 09:38:29 · 1338 阅读 · 0 评论 -
Linux内核的中断机制
§5.1 I386的中断与异常 中断通常被分为“同步中断”和异步中断两大类。同步中断是指当指令执行时由CPU控制单元产生的中断,之所以称为“同步中断”是因为只有在一条指令中止执行后CPU才会发出这类中断信号。而异步中断则是指由其他硬件设备依照CPU时钟随机产生的中断信号。 在Intel 80x86 CPU手册中,同步中断和异步中断也被分别称为“异常(Exception)”和“中断(Inte转载 2013-03-15 11:02:41 · 1815 阅读 · 0 评论 -
大型项目使用Automake/Autoconf完成编译配置
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。 这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自转载 2013-03-27 11:13:35 · 677 阅读 · 0 评论 -
非阻IO与EWOULDBLOCK EAGAIN
非阻塞读写默认 socket 是阻塞的,读写函数 read, readv, recv, recvfrom, recvmsg 以及 write, writev, send, sendto, sendmsg 都有可能会阻塞。可以将 socket 描述字设为非阻塞,这样,当 socket 描述字未就绪时,调用以上读写函数将会返回 EWOULDBLOCK 或 EAGAIN 。UNPv1转载 2013-03-27 17:49:46 · 1216 阅读 · 0 评论 -
网络编程模型综述 之 UNIX网络I/O模型
阻塞I/O Socket设置为阻塞模式,当socket不能立即完成I/O操作时,进程或线程进入等待状态,直到操作完成。如下图: 这种模型非常经典,也被广泛使用,优势在于非常简单,等待的过程中占用的系统资源微乎其微,程序调用返回时,必定可以拿到数据; 但简单也带来一些缺点,程序在数据到来并准备好以前,不能进行其他操转载 2013-10-24 17:05:29 · 879 阅读 · 0 评论 -
Linux网络编程一步一步学-select详解
select系统调用是用来让我们的程序监视多个文件描述符(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有某一个或多个发生了状态改变。select函数原型如下:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timev转载 2013-10-24 17:15:59 · 822 阅读 · 0 评论 -
Linux网络编程一步一步学-异步通讯聊天程序select
什么是异步通讯?就是通讯任意一方可以任意发送消息,有消息来到时会收到系统提示去接收消息。这里要用到select函数。使用步骤如下:1、设置一个集合变量,用来存放所有要判断的句柄(file descriptors:即我们建立的每个socket、用open打开的每个文件等)2、把需要判断的句柄加入到集合里3、设置判断时间4、开始等待,即select5、如果在设定的时间内转载 2013-10-24 17:18:11 · 1133 阅读 · 0 评论 -
__thread 和 __typeof__关键字
__thread:在多线程变成中,使用于global变量,使每个线程都私有一份。static __thread int count;void *function1(void *argc){printf("porgran pid:%u, the function1 pthread id is %lu, count:%d\n",getpid(), pthread_self(), c转载 2015-06-16 13:51:02 · 1140 阅读 · 0 评论 -
linux C 获取日期时间
原文 http://blog.csdn.net/zhu244912654/article/details/8610219概述世界标准时间( Coordinated Universal Time , UTC ),也就是大家所熟知的格林威治标准时间( Greenwich Mean Time , GMT )。世界各地时间也世界标准时间为基准划分为不同的时区,例如,中国的北京时间与转载 2015-05-27 22:04:40 · 2985 阅读 · 0 评论 -
select与pselect的信号屏蔽
pselect() 函数的原型是:int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);它和 select() 函数基本相同,区别在于两个不同的转载 2015-03-05 16:06:15 · 2427 阅读 · 1 评论 -
sigprocmask 阻塞进程
本系列文章由muge0913编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/73347711、有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。这种情况是通过阻塞信号实现的。 2、信号阻塞和忽略信号的区别。转载 2015-03-05 16:07:04 · 720 阅读 · 0 评论 -
/linux/include/linux/videodev.h
1 /* 2 * Video for Linux version 1 - OBSOLETE 3 * 4 * Header file for v4l1 drivers and applications, for 5 * Linux kernels 2.2.x or 2.4.x. 6 * 7 * Provides header转载 2015-03-01 22:51:10 · 5942 阅读 · 0 评论 -
linux中errno使用
当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息 (1)void perro转载 2015-01-23 11:33:48 · 739 阅读 · 0 评论 -
linux中线程的挂起与恢复(进程暂停)
今天在网上查了一下linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制。也没有完整详细的代码。故自己整理了一下程序流程为:主线程创建子线程(当前子线程状态为stop停止状态),5秒后主线程唤醒子线程,10秒后主线程挂起子线程,15秒后主线程再次唤醒子线程,20秒后主线程执行完毕等待子线程退出。代码如下:#include#in转载 2015-01-08 14:16:46 · 981 阅读 · 0 评论 -
Linux 信号signal处理函数
alarm(设置信号传送闹钟)相关函数 signal,sleep表头文件 #include定义函数 unsigned int alarm(unsigned int seconds);函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值返回之前闹钟转载 2014-09-04 14:21:43 · 697 阅读 · 0 评论 -
linux动态库与静态库混合连接
在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:gcc test.cpp -L. -ltestlib如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:gcc test.cpp -L. -static -ltestlib转载 2014-01-29 13:35:28 · 800 阅读 · 0 评论 -
\r,\n,\r\n
\r 是回车,return(光标到达最左侧)\n 是换行,newline(移到下一行)如果只换行,打印的东西会在下一行的先一个位置继续,比如===== ####如果只回车,打印的东西会覆盖原有的东西test\r123-->123t atest\r123-->123st转载 2013-10-23 17:14:50 · 720 阅读 · 0 评论 -
基于半同步/半反应堆线程池实现的HTTP解析服务端程序
简介: 半同步/半反应堆线程池是通过一个线程往工作队列添加任务T,然后工作线程竞争工作队列获得任务T。HTTP请求解析服务端程序:逐行解析客户端发送来的HTTP请求然后作出HTTP回答。采用线程池就是:服务端创建一个线程池,然后有HTTP请求到达就将HTTP请求的处理添加到线程池任务队列中去,线程池工作线程通过竞态机制(信号量)竞争任务T(HTTP请求处理)。 HTTP请求内容转载 2013-10-22 17:30:26 · 2188 阅读 · 0 评论 -
Elf
机器执行的是机器指令,而机器指令就是一堆二进制的数字。高级语言编写的程序之所以可以在不同的机器上移植就因为有为不同机器设计的编译器的存在。高级语言的编译器就是把高级语言写的程序转换成某个机器能直接执行的二进制代码。以上的知识在我们学习CS(Computer Science)的初期,老师都会这么对我们讲。但是我就产生疑问了:既然机器都是执行的二进制代码,那么是不是说只要硬件相互兼容,不同操作系统下的转载 2013-10-27 17:17:55 · 852 阅读 · 0 评论 -
half-sync/half-async 和 Leader/Followers 模式的主要区别
在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻:半同步/半异步(half-sync/half-async):许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在餐厅繁忙时留意给顾客安排桌位,为等待就餐的顾客按序排队是必要的。领班由所有顾客“共享”,不能被任何特定顾客占用太多时间。当顾客在一张桌子入坐后,有一个侍应生专门为这张桌子服务。转载 2013-10-25 13:05:49 · 814 阅读 · 0 评论 -
嵌入式系统 Boot Loader 技术内幕
1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统和建转载 2013-03-01 17:33:14 · 373 阅读 · 0 评论 -
Linux Arch目录下处理器体系架构介绍
alpha 处理器Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠普)收购的Compaq ,Alpha 便为HP(惠普)所有,不过HP (惠普)已经放弃发展alpha 处理器。arm 处理器Arm 系列处理器 是英国Arm 公司设计的主流嵌入式32转载 2013-03-01 10:58:20 · 456 阅读 · 0 评论 -
uboot 详细注释讲解
大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其转载 2013-03-01 16:50:15 · 500 阅读 · 0 评论 -
pthread-win32在VC2005下的使用
pthread-win32是一个在Win32环境下的Unix POSIX线程库的移植. 有了它, 可以比较方便的移植Unix/Linux多线程程序到Windows下. 在VC2005下使用也很简单:下载, 地址是 http://sourceware.org/pthreads-win32里面include目录中是头文件, lib目录中是.lib和.dll文件.在VC项目的属性转载 2013-02-20 11:20:00 · 738 阅读 · 0 评论 -
Linux下的C编程实战之文件系统编程
1.Linux文件系统 Linux支持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。下图给出了Linux中文件系统的关系: 在Linux平台下对文件编程可以使用两类函数:(1)转载 2013-02-20 13:10:37 · 650 阅读 · 0 评论 -
Linux编程练习 --多线程1--线程创建
POSIX线程—轻量级进程,线程调度是由内核调度程序完成的,线程所消耗的系统资源比较少,相互通讯也比较容易。多线程的优点:1.资源消耗量少。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花转载 2012-11-28 23:51:21 · 629 阅读 · 0 评论 -
进程控制2--exec族
系统调用exe函数族对当前进程进行替换,替换着为一个指定程序,其参数包括文件名filename,参数列表argv,以及环境变量envp整个函数家族如下:#include extern char **environ;int execl(const char *path, const char *arg, ...);int execlp(const char *file转载 2012-11-28 23:49:38 · 384 阅读 · 0 评论 -
学习linux/unix编程方法的建议[转]
首先先学学编辑器,vim, emacs什么的都行。然后学make file文件,只要知道一点就行,这样就可以准备编程序了。 然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。 如果想学习UNIX/LINUX的编程,《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。转载 2012-11-28 23:50:38 · 873 阅读 · 1 评论