
linux
文章平均质量分 67
origin_lee
这个作者很懒,什么都没留下…
展开
-
非阻塞(nonblock)socket接口会否出现EINTR错误
对于socket接口(指connect/send/recv/accept..等等后面不重复,不包括不能设置非阻塞的如select),在阻塞模式下有可能因为发生信号,返回EINTR错误,由用户做重试或终止。 但是,在非阻塞模式下,是否出现这种错误呢? 对此,重温了系统调用、信号、socket相关知识,得出结论是:不会出现。 首先, 1.信号的处理是在用户态下进行的,也就是必须转载 2016-02-26 19:03:20 · 1110 阅读 · 0 评论 -
Linux下获取线程TID的方法——gettid()
如何获取进程的PID(process ID)?可以使用:#include pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息:find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/include/bits/unis转载 2014-12-14 14:31:06 · 980 阅读 · 0 评论 -
Linux线程-互斥锁pthread_mutex_t
在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。一,锁的创建 锁可以被动态或静态创建,可以用转载 2014-12-14 11:36:03 · 411 阅读 · 0 评论 -
Linux下查看文件内容的命令
在Linux下面查看文件内容,不像windows那么方便,双击鼠标就可以搞定。在linux下面,所有一切都是文件,需要用命令来打开。 有许多命令都可以查看文件,不同的命令有不同的优点,可以针对不同的需要分别选择命令以提高效率: cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出转载 2014-12-30 12:26:49 · 323 阅读 · 0 评论 -
Ubuntu下编译boost1.47
首先ubuntu默认没有安装g++,所以先安装g++最新版本sudo apt-get install g++下载boost的最新源代码,在boost.org上。将其解压在任意文件夹。为了更完整的编译boost,需要下载额外的软件包,比如要完整编译boost-python库需要下载python2.6-dev,正则库regex需要unicode/icu,boost.iostreams库转载 2015-01-18 00:53:57 · 878 阅读 · 0 评论 -
epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol转载 2014-12-11 21:32:36 · 391 阅读 · 0 评论 -
errno错误码及含义(中文)
/usr/include/asm/errno.h0 为 success #defineEPERM 1 /* Operation not permitted */操作不允许 #define ENOENT 2 /* Nosuch file or directory */文件/路径不存在 #define ESRCH 3 /* Nosuch process */进程不存在转载 2014-12-30 18:50:13 · 6481 阅读 · 0 评论 -
ACCEPT()和ACCEPT4()
章节:Linux 程序员手册 (2)更新:2010-09-10到 易美翻译 翻译名字accept - 通过套接口接受一个连接概要#include Esys/types.h> /* 参看 “注意小节” */#include Esys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t转载 2014-12-30 18:14:07 · 1991 阅读 · 0 评论 -
linux中内核的一个不错的参数somaxconn
在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了. 每转载 2014-12-30 18:05:13 · 497 阅读 · 0 评论 -
Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf
LD_LIBRARY_PATH Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找) 移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。 当执行函数动态链接.so时,如果此文件不在缺省目录下‘/usr/l转载 2015-01-16 18:41:19 · 552 阅读 · 0 评论 -
getrlimit和setrlimit函数
功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。用法:include #include int getrlimit(int转载 2014-12-29 15:47:00 · 421 阅读 · 0 评论 -
linux环境变量显示、添加、删除
1. 显示环境变量HOME $ echo $HOME /home/terry 2. 设置一个新的环境变量WELCOME $ export WELCOME="Hello!" $ echo $WELCOME Hello! 3. 使用env命令显示所有的环境变量 $ env HOSTNAME=terry.mykms.org PVM_RSH=/usr/bin/rsh原创 2014-12-27 11:40:13 · 5295 阅读 · 0 评论 -
getsockopt的TCP层实现剖析
应用层 NAME getsockopt - get options on socketsSYNOPSIS #include #include int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);转载 2014-12-30 15:27:19 · 1272 阅读 · 0 评论 -
mktime 夏令时
我们的最终目的是把字符串格式的时间转换为内部使用的“日历时间”,即到UTC 1970年1月1日零时的秒数。这里就存在夏令时的问题。比如俄罗斯时间2008年10月26日2:30由于夏令时的跳变会经过两次,这两次所代表的“日历时间”明显不同。如果仍按照上面的程序,由mktime()函数来决定这个时间是否处于夏令时(它会根据当前时区自动判断,在没有发生时间重叠的情况下处理是正确的)就会有问题。这时我们不转载 2015-12-18 18:15:53 · 1307 阅读 · 0 评论 -
PROC系列之---/proc/pid/stat
/proc/ /stat包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。[root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 429转载 2015-08-19 12:05:41 · 905 阅读 · 0 评论 -
/proc/stat 的解释
/proc/stat 的解释关于linux 系统/proc/stat的解释和应用。这段perl代码,可以提供计算cpu利用率数据采集 [~]$ cat /proc/statcpu 432661 13295 86656 422145968 171474 233 5346cpu0 123075 2462 23494 105543694 16586 0 4615转载 2015-08-19 12:04:11 · 2176 阅读 · 0 评论 -
linux exec与重定向
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。fork概念转载 2015-04-16 19:22:51 · 934 阅读 · 0 评论 -
setjmp/longjmp非局部跳转函数分析
之前就一直好奇setjmp()/longjmp()函数是怎么实现非局部跳转的,心中猜测应该是通过保存调用setjmp()函数处的栈上下文(stack context),之后通过函数longjmp()来恢复这个栈上下文来实现的,可是心中依然有疑惑,到底需要保存哪些东西呢,还有是怎么改变setjmp函数的返回值的呢。本文就通过实际程序调试以及glibc源码来一探究竟吧(本文针对i386平台)!转载 2015-04-15 12:13:02 · 2133 阅读 · 0 评论 -
__attribute__((packed))详解
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:在TC下:struct my{ char ch; int a;} sizeof(in转载 2015-03-29 11:01:50 · 611 阅读 · 0 评论 -
PROC系列之---/proc/pid/stat
/proc/ /stat包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。[root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 429转载 2015-03-26 18:43:53 · 1380 阅读 · 0 评论 -
PROC系列之---/proc/stat/
包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。[work@builder ~]$ cat /proc/statcpu 432661 13295 86656 422145968 171474 233 5346cpu0 123075 2462 23494 105543694 16586 0 4615cpu1 111917 4124 23858 105转载 2015-03-26 18:45:09 · 508 阅读 · 0 评论 -
eventfd man
概要 #include int eventfd(unsigned int initval, int flags);描述eventfd()创建一个“eventfd对象”,这个对象能被用户空间应用用作一个事件等待/响应机制,靠内核去响应用户空间应用事件。这个对象包含一个由内核保持的无符号64位整型计数器。这个计数器由参数initval说转载 2015-01-06 11:05:07 · 580 阅读 · 0 评论 -
Linux 下使用clock_gettime详解
要包含这头文件且在编译链接时需加上 -lrt ;因为在librt中实现了clock_gettime函数。---struct timespec ts;clock_gettime(CLOCK_MONOTONIC,ts);printf("%d %d",ts.tv_sec, ts.tv_nsec);打印出来的时间跟 cat /proc/uptime 第一个参数一样转载 2014-12-15 17:16:39 · 8644 阅读 · 0 评论 -
linux 系统调用
5.1.5 如何使用系统调用如图5.2所示,用户应用可以通过两种方式使用系统调用。第一种方式是通过C库函数,包括系统调用在C库中的封装函数和其他普通函数。 图5.2 使用系统调用的两种方式第二种方式是使用_syscall宏。2.6.18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,转载 2014-12-14 16:48:23 · 644 阅读 · 0 评论 -
Linux虚拟内存管理(glibc) mmap sbrk
在使用mysql作为DB开发的兑换券系统中,随着分区表的不断创建,发现mysqld出现了疑似“内存泄露”现象,但通过 valgrind 等工具检测后,并没发现类似的问题(最终原因是由于glibc的内存碎片造成)。 因此,需要深入学习 Linux 的虚拟内存管理方面的内容来解释这个现象;Linux 的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的转载 2015-01-15 14:03:18 · 2421 阅读 · 0 评论 -
time,gettimeofday,clock_gettime,_ftime
[c-sharp] view plaincopyprint?time()提供了秒级的精确度 1、头文件 2、函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒数 用time()函数结合其他函数(如:localtime、gmtime、asctime转载 2014-12-26 10:49:08 · 348 阅读 · 0 评论 -
posix_fadvise清除缓存的误解和改进措施
原创文章,转载请注明: 转载自系统技术非业余研究本文链接地址: posix_fadvise清除缓存的误解和改进措施在典型的IO密集型的数据库服务器如MYSQL中,会涉及到大量的文件读写,通常这些文件都是通过buffer io来使用的,以便充分利用到Linux操作系统的page cache。Buffer IO的特点是读的时候,先检查页缓存里面是否有需要的数据,如果没有就从转载 2014-12-26 09:59:58 · 2439 阅读 · 0 评论 -
vm_area_struct
原文:http://blog.youkuaiyun.com/ywf861029/article/details/6114794Linux内核中,关于虚存管理的最基本的管理单元应该是struct vm_area_struct了,它描述的是一段连续的、具有相同访问属性的虚存空间,该虚存空间的大小为物理内存页面的整数倍。 下面是struct vm_area_struct结构体的定义转载 2014-12-05 10:26:27 · 432 阅读 · 0 评论 -
Linux下各种时间
目录[-]rdtscgettimeofdaytimegmtime_rlocaltime_rasctime_rctime_rmktimestrftime和strptimelocaltime_r和gmtime_r性能对比rdtsc这是一个汇编指令,可以获取CPU的时钟周期,即滴答tick次数,现在随便一个CPU的频率就是几GHz了转载 2014-12-21 10:52:08 · 685 阅读 · 0 评论 -
open函数中O_CLOEXEC标志的开关
man open里有这么一个flag:O_CLOEXEC (Since Linux 2.6.23) Enable the close-on-exec flag for the new file descriptor. Specifying this flag permits a program to avoid additional fcntl(2)转载 2014-12-19 13:54:54 · 1467 阅读 · 0 评论 -
linux 文件夹的颜色代表什么意思
蓝色表示目录;绿色表示可执行文件;红色表示压缩文件;浅蓝色表示链接文件;灰色表示其它文件;红色闪烁表示链接的文件有问题了;黄色是设备文件,包括block, char, fifo。用dircolors -p看到缺省的颜色设置,包括各种颜色和“粗体”,下划线,闪烁等定义。 在环境变量$LS_COLORS上修改就行转载 2015-01-28 15:23:07 · 1420 阅读 · 0 评论 -
/dev/null 的用途
/dev/null ,从名称上可以很显然看出是一个空文件(写入到/dev/null时全部丢失,读取/dev/null时自己返回EOF),那么你会很疑惑,他到底有什么用途呢,请看下文听我讲解,可能你在很多脚本里看过 /dev/null,具体总结下几种常见用途.一、禁止标准输出.eg: cat $filename >/dev/null #转载 2015-01-08 16:25:18 · 3073 阅读 · 0 评论 -
timerfd使用总结
timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景。timerfd是linux内核2.6.25版本中加入的借口。timerfd、eventfd、signalfd配合epoll使用,可以构造出一个零轮询的程序,但程序没有处理的事件时,程序是被阻塞的。这样的话在某些移动设备上程序转载 2015-01-05 15:49:17 · 2784 阅读 · 0 评论 -
Linux术语全称
bin = BINaries (binary) /dev = devices /etc = ETCetera etcetera附加的人, 附加物, 以及其它, 等等 /lib = LIBrary /proc = PROCesses /sbin = Superuser BINaries /tmp = TeMPorary /usr = Unix Shared Resourc转载 2014-11-29 14:20:09 · 437 阅读 · 0 评论 -
其实Unix很简单
其实Unix很简单 陈皓 很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多数时候,我发现问这些问题的朋友都有两个特点:1)对Unix有畏难心理,对其没有信心;2)喜欢用拿Windows来和Unix做比较。 这两种特点就像两个“心理暗示”,暗示着自己Unix很不好学,暗示着Uni转载 2014-09-04 20:28:12 · 411 阅读 · 0 评论 -
linux 技巧:使用 screen 管理你的远程会话
你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。元凶:SIGHUP 信号让我们来看看为什么关掉窗口/断转载 2014-09-11 09:00:31 · 403 阅读 · 0 评论 -
开启xterm终端256色和终端下vim 256色
相同的colorschema,vim和gvim的颜色差距还是很大的,因为gvim使用X的颜色,而vim只能使用终端提供的颜色,所以造成了二者的显示差异。xterm开启256色现在的终端模拟器早就支持256色了,不过默认可能还是8色的。开启xterm终端,查看xterm终端支持的颜色$ tput colors8xterm终端默认还是8色的查看终端类型$转载 2014-09-08 23:26:46 · 23043 阅读 · 4 评论 -
linux 静态库、共享库
一、什么是库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。Linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。二、静态函数库、动态函数库转载 2014-08-20 12:45:14 · 376 阅读 · 0 评论 -
linux mmap 详解
linux mmap 详解谨以此文纪念过往的岁月一.前言mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的,有些只能根据其函数名来猜测其具体的功能,在本文中,一起来重新深入理解其具体的实现。二.mmap的用户层应用void *mmap(void *start,size_t length,int prot,int flags,int fd,o转载 2014-12-05 11:24:07 · 430 阅读 · 0 评论 -
gcc的内建函数__builtin_expect
1.问题引出在内核代码的条件分支中的判断中,经常可以看到如下两条语句:[cpp] view plaincopy/* ...... */ if(unlikely(!something)) /* ...... */ if(likely(something)) /* ...... */ 追述一下可以转载 2014-12-22 20:06:59 · 904 阅读 · 0 评论