
linux
wuyue五月
这个作者很懒,什么都没留下…
展开
-
Linux strace命令
转载地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以转载 2016-06-27 11:24:25 · 277 阅读 · 0 评论 -
Linux进程内存分析pmap命令(转)
名称: pmap - report memory map of a process(查看进程的内存映像信息)用法 pmap [ -x | -d ] [ -q ] pids... pmap -V选项含义 -x extended Show the extended format. 显示扩展格式 -d转载 2016-06-27 09:26:23 · 1215 阅读 · 0 评论 -
字节对齐
我们知道的当一个结构体,如果我们想知道他占多少内存空间的话我们可以利用sizeof()来查看,但是有时候sizeof()得出的结构竟然和我们想象的不一样,这和编译器有很大的关系。编译器有自己的字节对齐机制,他为了某些原因,在内存上进行了一些调整。和填充,导致得到了与我们想法不一样的结果。虽然vc字节对齐网上有很多资料,但是呢,下面我就说说自己的理解,自己对这套规则的记忆方法。采用字节对转载 2016-05-14 17:32:01 · 337 阅读 · 0 评论 -
线程安全与可重入
源出处:http://waret.iteye.com/blog/744169线程安全函数 • 概念: 线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 • 确保线程安全: 要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全转载 2016-04-30 20:18:51 · 385 阅读 · 0 评论 -
eventfd以及epoll原理分析
这两天公司代码中用到了epoll。然后在跟同事闲扯的过程中发现了Linux中有eventfd。两者虽然名字看起来差不多,但是相关性倒是不多。为了弄明白这两个东西到底在内核上是怎么实现的,这两天将内核这两个部分的相关代码看了下,也终于明白了这两个东西的实现机制。后续几篇博客我尽量将这两个东西的工作原理阐述清楚,但是自己的语言表达能力比较差,也只能是尽量了。今天这篇博客首先是介绍两者的转载 2015-03-29 23:10:58 · 1307 阅读 · 0 评论 -
守护进程的创建方法和步骤
http://blog.chinaunix.net/uid-25365622-id-3055635.html概念: 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时转载 2016-05-10 10:42:30 · 347 阅读 · 0 评论 -
IO - 同步,异步,阻塞,非阻塞
摘自http://blog.youkuaiyun.com/historyasamirror/article/details/5778378当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link。写完之后发现很多人都很喜欢,我还是非常开心的,也说明这转载 2015-07-01 22:13:38 · 345 阅读 · 0 评论 -
linux环境下调试有关涉及到条件编译的c程序的小用法
条件编译,有三种格式1 #if 表达式 程序段1 #else 程序段2 #endif 很简单,表达式为真编译1,否则编译2。2 #ifdef 标识符 程序段1 #else 程序段2 #endif如果标识符已用#define定义过,则为真编译1,否则编译23 和2的基本一致就是把转载 2015-05-18 23:10:20 · 480 阅读 · 0 评论 -
linux lsof详解
lsof简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用转载 2016-06-28 09:18:14 · 323 阅读 · 0 评论 -
getsockopt()和setsockopt()函数详解
功能描述:获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#inclu转载 2016-07-15 09:09:18 · 9359 阅读 · 1 评论 -
大话keepalive
大话keepalive我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的。tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方端掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST,而不是ACK,那么就释放当前链接。设想一下,如果tcp层没有keepalive的机制,一转载 2017-12-18 14:19:41 · 528 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之前两个进程用转载 2016-10-23 11:50:46 · 378 阅读 · 0 评论 -
UNIX 如何使用交换空间
所有 UNIX 操作系统都支持某种虚拟内存 (VM) 系统。使用 VM 系统,您有两个主要区域来存储有关活动应用程序及其使用的数据的信息——物理随机访问存储器 (RAM) 和硬盘驱动器上分配的空间。在具有 VM 的计算机中,可加载到内存中的应用程序和数据量可以大于物理 RAM,因为没有活动地使用的应用程序和信息被交换 到了磁盘上(交换空间 这个术语由此得名)。VM 系统的优点在于,转载 2016-09-06 20:15:23 · 622 阅读 · 0 评论 -
linux 遭遇SIGPIPE信号,导致进程退出的问题
当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确转载 2016-08-25 20:36:42 · 2130 阅读 · 0 评论 -
内存区域分配与ELF 之类的关系
转载地址:http://blog.youkuaiyun.com/love_gaohz/article/details/41310597一.在学习之前我们先看看ELF文件。ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具体到每一个结构不同。下面我们就从整体上看看这转载 2016-08-30 13:22:34 · 4138 阅读 · 0 评论 -
linux获取各种进程类型的信息
1 password file终端上输入cat /etc/passwd可以看见很多相关信息。也可以通过以下函数:#include #include struct passwd* getpwnam(const char* name);struct passwd* getpwuid(uid_t uid);int getpwnam_转载 2016-08-15 19:00:17 · 1744 阅读 · 0 评论 -
Unix/Linux中的read和write函数
文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。write函数 write函数定义如下:#include ssize_t write(int fil转载 2016-07-31 18:38:51 · 9383 阅读 · 0 评论 -
linux 下文件及目录函数
文件及目录函数(37)chdir, chmod, chown, chrootfchdir, fchmod, fchown, ftruncatelchown, truncate,get_current_dir_name, getcwd, getwdopendir, closedir, readir, scandir, seekdir, rewinddir,telldir(mk转载 2016-08-15 16:48:26 · 2342 阅读 · 0 评论 -
Linux命令之exit - 退出当前shell【返回值状态】
用途说明exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行。 常用参数格式:exit n退出。设置退出码为n。(Cause the shell to exit with a status of n.) 格式:exit退出。退出码不变,即为最后一个命令的退出码。(If n is omitted, the exit status is that转载 2015-04-16 22:54:21 · 16666 阅读 · 0 评论 -
信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不转载 2015-03-16 23:13:54 · 651 阅读 · 0 评论 -
分享实用工具源码--实现Windows IDE中查看Linux下编译信息
作者:fbysss msn:jameslastchina@hotmail.comblog:blog.youkuaiyun.com/fbysss 声明:本文由fbysss原创,转载请注明出处关键字: 实用工具源码 Windows下查看Linux编译信息一、背景:本人写C程序不多,更不用说Linux下了。偶然一个机会,接了个这样的活,vi我用的还马马虎虎,但程序超过一千行,看起来就有些眼花了转载 2014-10-30 22:47:10 · 1267 阅读 · 0 评论 -
Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路由,转载 2014-07-31 18:12:56 · 561 阅读 · 0 评论 -
Linux中exec命令相关
Linux中exec命令相关:exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、his转载 2014-04-09 18:28:23 · 902 阅读 · 0 评论 -
I/O子系统:select,poll,epoll,kqueue, iocp(Windows)及各种I/O复用机制 模式Reactor Proactor
常见的I/O模型及其区别首先,介绍几种常见的I/O模型及其区别,如下:《Unix网络编程》blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions转载 2014-04-03 20:34:27 · 2335 阅读 · 0 评论 -
I/O多路复用select,Poll epoll 的比较
select,poll,epoll简介selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行扫描时是线性扫描转载 2014-04-03 22:20:52 · 1073 阅读 · 0 评论 -
fcntl函数说明
(1)fcntl函数说明前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁。在一般情况下,内核和系统转载 2014-04-03 21:08:31 · 768 阅读 · 0 评论 -
linux异步IO的两种方式
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情)。假此机会,也顺便研究了一下linux下的异步IO的实现。linux下转载 2014-04-03 21:48:30 · 12545 阅读 · 2 评论 -
Unix Socket编程--I/O复用之select模型
一。之前写过一篇关于并发服务器的处理机制,其内容是这样的:考虑到有多个客户连接的情况下,服务器在收到每一个新的客户的连接请求时,都会创建一个新的连接套接字,而原来的监听套接字将保留以继续监听后续的连接请求;如果服务器不能立刻接受后来的连接,他们将会被添加到队列中等待被处理。当服务器调用fork()来为自己创建拷贝时,打开的连接套接字将被新的子进程所继承。新的子进程将和该客户进行连接转载 2014-04-03 20:43:02 · 655 阅读 · 0 评论 -
linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法
inux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法[url=http://www.linuxdiyf.com/bbs/viewthread.php?tid=90655][/url]相信很多跟我一样想要学习unix编程的朋友在兴冲冲拿到《unix环境高级编程》后,准备拿源码练练手时,执行第一个myls就出现一大堆的错误,这未免时个不小的打击。今天把解决方法写下来,第一转载 2014-11-17 23:30:04 · 554 阅读 · 0 评论 -
UNIX网络编程之环境配置
开始学习《Unix网络编程》,输入第一个程序后,遇到各种错误,先将解决方案记录如下。遇到的第一个错误是:没有找到头文件“unp.h”,该头文件是作者自己写的,并不包含在/usr/include中,这时需要到网上下载unpv13e.tar.gz到某一目录。具体操作:mkdir /home/yourname/download %创建存放压缩文件的目录tar -xzvf转载 2014-11-17 23:31:29 · 511 阅读 · 0 评论 -
linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试
TSO,全称是TCP Segmentation Offload,我们知道通常以太网的MTU是1500,除去TCP/IP的包头,TCP的MSS (Max Segment Size)大小是1460,通常情况下协议栈会对超过1460的TCP payload进行segmentation,保证生成的IP包不超过MTU的大小,但是对于支持TSO/GSO的网卡而言,就没这个必要了,我们可以把最多64K大小的TC转载 2014-10-31 15:32:39 · 1094 阅读 · 0 评论 -
多线程同步条件变量
最近看《UNIX环境高级编程》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 [cpp] view plaincopy#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化转载 2015-03-16 23:11:20 · 460 阅读 · 0 评论 -
Linux的SOCKET编程详解
Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX转载 2015-03-04 11:02:17 · 455 阅读 · 0 评论 -
ioctl函数
ioctl函数 本函数影响由fd参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0:成功 -1:出错 第三个参数总是一个指针,但指针的类型依赖于request参数。我们可以把和网络相关的请求划分为6类:套接口操作文件操作接口操作ARP高转载 2015-03-04 09:59:56 · 702 阅读 · 0 评论 -
linux shell数据重定向(输入重定向与输出重定向)详细分析
在了解重定向之前,我们先来看看linux 的文件描述符。linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。 linux启动后,会默认打开3个文件描述符,分别是:标准输转载 2015-01-25 17:06:42 · 483 阅读 · 0 评论 -
linux无锁化编程--__sync_fetch_and_add系列原子操作函数
linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础。下面的东西整理自网络。先感谢大家的分享! __sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables__sync_fet转载 2015-02-26 11:24:15 · 721 阅读 · 0 评论 -
setjmp和longjmp函数使用详解
非局部跳转语句---setjmp和longjmp函数。非局部指的是,这不是由普通C语言goto,语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。#include Int setjmp(jmp_buf env); 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值Void longjmp(jmp_buf env,in转载 2015-02-07 22:06:14 · 480 阅读 · 0 评论 -
socket shutdown和close的区别
socket关闭连接的方法有两种分别是shutdown和close。1)shutdown的定义:#includeint shutdown(int sockfd,int how);how的方式有三种分别是:SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。转载 2015-01-18 15:01:46 · 2963 阅读 · 0 评论 -
VirtualBox内Linux系统怎样与Windows共享文件夹
在日常工作或学习中我们经常需要在一台电脑上同时使用Windows和Linux(这里以Ubuntu为例)两个系统,我们通常的做法有两种:一种安装双系统(双系统的安装方法经验里已经有很多,大家可以去参照)另一种更为普遍的是在Windows本机用虚拟机安装Linux系统,然而Windows本机与虚拟机内Linux系统的文件该如何交换呢,其实也有好多方法,如USB接口设备共享、Ftp服务器转载 2014-11-22 20:07:42 · 755 阅读 · 0 评论 -
进程间数据通信方式和特点
由于不同的进程运行在各自不同的内存空间中.一方对于变量的修改另一方是无法感知的.因此.进程之间的信息传递不可能通过变量或其它数据结构直接进行,只能通过进程间通信来完成。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:控制信息的通信和大批数据信息的通信.前者称为低级通信,后者称为高级通信。低级通信主要用于进程之间的同步、互斥、终止、挂起等等控制信息的传递。高级通转载 2014-04-03 18:09:42 · 1002 阅读 · 0 评论