linux细枝末节
文章平均质量分 92
介绍linux系统学习中常见的、易错的知识点以及编程问题
Sunshine_top
安安静静、认认真真完成自己的事情
展开
-
进程同步和线程同步
怎样同步多个线程或多个进程的活动。为允许在线程或进程间共享数据,同步是必需的。 互斥锁和条件变量是同步的基本组成部分。互斥锁和条件变量出自POSIX.1线程标准,它们总是可用来同步一个进程内的各个线程的。如果一个互斥锁或条件变量存放在多个进程间共享的某个内存中,那么POSIX还允许它用于这些进程间的同步。互斥锁、条件变量、读写锁、信号量均可用于进程、线程的同步。多线原创 2015-05-30 09:53:15 · 6086 阅读 · 0 评论 -
UNIX域协议
文章参考UNP,例子也来源于该书。 Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所使用的API就是在不同主机上执行客户/服务器通信所用的API(套接字API)。 Unix域套接字仅仅复制数据,并不执行协议处理,不需要添加或删除网络报头,无需计算校验和,不要产生顺序号,无需发送确认报文。Unix域套接字提供流和数据报两种接口。Unix原创 2015-05-29 10:13:12 · 1484 阅读 · 0 评论 -
进程通信方式:共享内存区
本文主要参考《unix网络编程卷2:进程间通信》另外可以参考以下文章:mmap:Linux环境进程间通信(五): 共享内存(上)System V共享内存: Linux环境进程间通信(五): 共享内存(下) 共享内存区是可用IPC方式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据传递就不再涉及内核(这里的“不再涉及内核”原创 2015-05-28 09:49:50 · 3153 阅读 · 0 评论 -
Linux进程间通信IPC的几种方式简介
Linux进程通信的源头 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T(原为American Telephone & Telegraph的缩写,也是中文译名美国电话电报公司由来)的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段原创 2015-05-27 19:58:11 · 7340 阅读 · 0 评论 -
可重入函数
使用可重入函数进行更安全的信号处理http://blog.csdn.net/yueyahe/article/details/729126可重入性 在早期的编程中,不可重入性对程序员并不构成威胁;函数不会有并发访问,也没有中断。在很多较老的 C 语言实现中,函数被认为是在单线程进程的环境中运行。不过,现在,并发编程已普遍使用,您需要意识到这个缺陷。本文描原创 2015-05-27 15:07:04 · 1001 阅读 · 0 评论 -
可靠信号与不可靠信号
来自:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html一、信号及信号来源信号本质 信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知转载 2015-05-25 21:13:52 · 9119 阅读 · 1 评论 -
linux软链接和硬链接
1、概述 硬链接(hard link)与软链接(symbolic link)是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS,参考文章Linux 文件系统剖析) 的四个基本概念之一。2、硬链接和软链接硬链接 硬链接是通过索引节点原创 2015-05-24 15:27:28 · 1855 阅读 · 0 评论 -
setjmp和longjmp函数
setjmp和longjmp的用途 在C中,goto语句是不能跨函数的,而执行这类跳转功能的函数是setjmp和longjmp。这两个函数对于处理发生在深层嵌套函数调用中的出错情况是非常有用的。非局部指的是,这不是(注意:这两个函数无法在一个函数内部跳转,是针对函数间的跳转)类似goto语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的一个函数原创 2015-05-23 08:53:13 · 1920 阅读 · 0 评论 -
do{...}while(0)的意义和用法
libnids中的两个宏如下是libnids中定义的两个宏,这两个宏都包含了多个语句,看起来很复杂的样子。这两个宏定义其实是有潜藏的问题的,具体看本文第二部分中的“辅助定义复杂的宏,避免引用的时候出错”。#define START_CAP_QUEUE_PROCESS_THREAD() \ if(nids_params.multiproc) { /* threading... */ \原创 2015-05-21 21:39:34 · 1291 阅读 · 0 评论 -
linux静态库和共享库
这篇文章不错:http://blog.chinaunix.net/uid-26833883-id-3219335.html静态库 这类库的名字一般是libxxx.a优点:编译后的执行程序不需要外部的函数库支持,因为整个函数库的所有数据都被整合进目标代码中,所有使用的函数都已经被编译进可执行文件了。缺点:(1)利用静态函数库编译成的文件比较大,因为整个函数原创 2015-05-20 20:17:19 · 1945 阅读 · 0 评论 -
多线程:常见题目
1、线程基本概念、线程状态 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源(线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量、线程私有数据); 它可与同属一个进程的其它线程共享进程所拥有的全部原创 2015-05-18 19:52:03 · 1988 阅读 · 0 评论 -
sendfile: Linux中的"零拷贝"
译文:http://blog.csdn.net/caianye/article/details/7576198原文:http://www.linuxjournal.com/article/6345如今几乎每个人都听说过Linux中所谓的"零拷贝"特性,然而我经常碰到没有充分理解这个问题的人们。因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在本文中原创 2015-05-18 14:50:47 · 2502 阅读 · 0 评论 -
Linux 中的零拷贝技术,第 2 部分
http://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/index.html?ca=drs-Linux 中的直接 I/O如果应用程序可以直接访问网络接口存储,那么在应用程序访问数据之前存储总线就不需要被遍历,数据传输所引起的开销将会是最小的。应用程序或者运行在用户模式下的库函数可以直接访问硬件设备的存储,操作系统内转载 2015-05-18 11:13:07 · 1213 阅读 · 0 评论 -
Linux 中的零拷贝技术,第 1 部分
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限转载 2015-05-18 11:10:47 · 1319 阅读 · 0 评论 -
线程私有数据STD
http://blog.csdn.net/xluren/article/details/8226668以下来自:http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part2/概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是原创 2015-05-16 15:20:06 · 2287 阅读 · 0 评论 -
tar命令
tar [-cxtzjvfpPN] 文件与目录 ....参数:-c : 建立一个压缩文件的参数指令(create 的意思);-x : 解开一个压缩文件的参数指令!-t : 查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与原创 2015-04-10 16:38:00 · 1031 阅读 · 0 评论 -
Makefile的注意事项
VPATH、vpath 在一些大的工程中,有大量的源文件,我们通常的做法是把这许多的源文件分类,并存放在不同的目录中。所以,当make需要去找寻文件的依赖关系时,你可以在文件前加上路径,但最好的方法是把一个路径告诉make,让make在该路径下自动去找。 Makefile文件变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和原创 2015-04-05 16:10:25 · 2425 阅读 · 0 评论 -
linux的COW(Copy-On-Write)
fork()后,子进程是父进程的副本。在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代原创 2015-03-25 20:25:45 · 2315 阅读 · 0 评论 -
vi/vim常用命令
工作模式插入命令a 在光标后附加文本A 在本行行尾附加文本i 在光标前插入I 在本行行首插入文本o 在光标下面插入新的一行O 在光标上面插入新的一行定位命令h 左移一个字符/ 向左的箭头键j 下移一行 / 向下的箭头键k 上移一行 / 向上的箭头键l 右移一个字符 / 向右的箭头键$ 移动到行尾0(数字零)原创 2015-03-15 21:29:13 · 1435 阅读 · 0 评论 -
ubuntu乱码
我的问题: 从网站获取的新闻直接存在文本(.txt)中会出现乱码。解决方式: 解决txt文档乱码 1. 打开终端,在其中输入命令: gconf-editor 并回车。 2. 在新开的窗口里,在左边依次展开“apps”、“gedit-2”、“preferences”、“encodings”。 3. 在右边的窗口里,双击“auto_detected”。 4.转载 2014-10-24 08:40:56 · 1234 阅读 · 0 评论 -
linux C时间处理
http://blog.csdn.net/water_cow/article/details/7521567简介本文旨在为了解Linux各种时间类型与时间函数提供技术文档。1、Linux下常用时间类型Linux下常用时间类型有四种:time_t、struct tm、struct timeval、struct timespec1.1 time_t时间类型time_转载 2014-10-23 11:27:32 · 3992 阅读 · 0 评论