linux编程
xiaocaichonga
这个作者很懒,什么都没留下…
展开
-
offsetof
offsetof(struct x,x_member)为一个宏,其作用就是返回一个机构中成员变量的偏移量。原创 2012-07-24 15:32:48 · 362 阅读 · 0 评论 -
我对消息队列的理解
用消息队列进行进程间的通信,需要记住两个结构,4个函数第一个结构:struct ipc_perm{uid_t uid;gid_t gid;uid_t cuid;gid_t cgid;mode_t mode;....};此结构主要用于用于 权限。第二个结构:struct msgid_ds {struct ipc_termmsg_原创 2012-07-17 16:25:34 · 708 阅读 · 0 评论 -
我对管道pipe的理解
管道也是一种文件,那么对文件的操作,对管道也适用,一个文件可以用文件描述符做对应,对一个文件描述符的操作函数,其实就是对该文件的操作。而一个文件描述符就有不同的属性,相关函数对文件的操作就会不同。而一个文件可以对应多个文件描述符,所以可以利用多个描述符,对一个文件进行不同的操作。管道就是这么一种文件,他默认的对应两个文件描述符,而这两个文件描述符,一个是应用于管道文件的读,一个是应用于管道原创 2012-07-16 21:05:49 · 877 阅读 · 1 评论 -
我对popen(char *cmd,char *mode)的理解
FILE *popen(char *cmd,char *mode)如果 mode 是“r",通常是一个父进程调用popen函数,那么此时popen生成了一个子进程,子进程干的事情 就是cmd,然后做完这件事后,会把结果送进子进程的标准输出,而这个标准输出就对应着父进程的一个流文件指针,比如FILE *fd,fd=popen(cmd,"r")的话,子进程的标准输出就对应于父进程的fd了。原创 2012-07-16 19:21:58 · 1958 阅读 · 0 评论 -
什么是线程安全
来源:http://baike.baidu.com/view/1298606.htm如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就原创 2012-07-12 22:25:19 · 246 阅读 · 0 评论 -
linux中errorno
errorno在linux中是一个整型左值,当UNIX函数出错时,其被赋予一个整型常量,这些常量均以E开头。关于errno的两个规则与两个函数1.两个规则:①,如果没有出错,则其值不会被一个例程清除,仅当函数的返回值指明出错时,才检验其值。②,任一函数不会将errno的值设置为0.2.两个函数:①#include char *strerror(int errnum);②#i原创 2012-07-13 10:39:38 · 6541 阅读 · 0 评论 -
linux 进程地址空间的一步步探究
转自:http://blog.21ic.com/user1/4132/archives/2012/91631.html我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内转载 2012-07-13 14:05:32 · 321 阅读 · 0 评论 -
虚拟地址与物理地址之间的关系
转自:http://learn.akae.cn/media/ch17s04.html4. MMU 请点评现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍MMU的作用。首先引入两个概念,虚拟地址和物理地址。如果处理器没有MM转载 2012-07-13 13:38:25 · 1569 阅读 · 0 评论 -
什么是函数接口
函数接口 就是函数的调用者与函数的实现者之间的关系描述。也就是 “返回值类型与返回值大小+函数名+参数值类型” 参考文献:http://learn.akae.cn/media/ch24.html原创 2012-07-12 14:32:43 · 4537 阅读 · 0 评论 -
linux中利用互斥量对数据结构进行保护的源代码
#include /*malloc函数调用*/#include /*线程的互斥量的系统调用*/ struct foo{ /*为了对一个数据结构的互斥访问*/ int count; /*便于利用互斥量*/ pthread_mutex_t mutex; /*用count的目的是,用于记录目前所有线程对该结构对象的引用数量*/ /*other struc原创 2012-07-11 10:55:34 · 318 阅读 · 0 评论 -
线程编译出错
来源:http://www.ixpub.net/thread-682701-1-1.html在Linux下创建线程时,编译时会出现下面的错误,[root@linuxserver 807]# gcc -o 22 22.c/tmp/cc21HcoW.o(.text+0x4c): In function `main':: undefined reference to转载 2012-07-10 20:33:29 · 455 阅读 · 0 评论 -
http://www.cnblogs.com/coveted/archive/2011/12/28/2304509.html
http://www.cnblogs.com/coveted/archive/2011/12/28/2304509.html一、字符串字面值字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。字符串没有变量名字,自身表示自身"Hello World!" /转载 2012-07-10 18:08:16 · 1470 阅读 · 0 评论 -
linux 中 return 与exit的区别
return 是c语言中的关键字,而exit是linux中的系统调用。return是表示函数的返回,而exit是进程的终止。如果return 或者exit出现在main函数中,两者的作用是一样。如果return出现在子程序中表示返回,而exit出现在子进程中表示终止子进程。参考资料:http://topic.csdn.net/t/20050224/16/3803949.ht原创 2012-07-09 19:37:55 · 865 阅读 · 0 评论 -
什么是低速系统调用
可能使进程永远阻塞的系统调用就是低速系统调用。原创 2012-07-09 20:36:06 · 721 阅读 · 0 评论 -
我对信号量的理解
linux中信号量,记住四个结构(struct semid_ds,信号量的无名结构,struct sembuf,union semun)和三个函数(semget,semctl,semop)四个结构分别是:1.信号量集合结构 struct semid_ds{struct ipc_permsem_perm; /*关于权限的*/unsignec shortsem_nsems;/*原创 2012-07-17 21:25:27 · 596 阅读 · 0 评论 -
我对msync()的理解
int msync(void *addr,size_t len,int flags)该函数的作用就是将映射区的数据冲洗到磁盘。其中flags值可为 MS_ASYNC,MS_SYNC,MS_INVALIDATEMS_ASYNC的作用是,不管映射区是否更新,直接冲洗返回。MS_SYNC的作用是,如果映射区更新了,则冲洗返回,如果映射区没有更新,则等待,知道更新完毕,就冲洗返回。M原创 2012-07-18 14:58:49 · 6573 阅读 · 0 评论 -
我对存储映射I/O的理解
存储映射,就是讲磁盘文件映射到内存,则对相应内存的操作就相当于对磁盘文件的操作。和存储映射相关的4个函数:mmap,mprotect,msync,munmap1.void *mmap(void *addr,size_t len,int pro,int flags,int filedes,off_t offset) /*建立存储映射*/作用: 一、就是建立文件filedes中从offs原创 2012-07-18 15:24:56 · 1298 阅读 · 0 评论 -
关于 流 的
转自:http://osr507doc.sco.com/en/PERFORM/streams_rsc.htmlDOC HOMESITE MAPMAN PAGESGNU INFOSEARCHPRINT BOOK Tuning networking res原创 2012-07-24 13:22:09 · 474 阅读 · 0 评论 -
套接字中一些最好记住的代码模块
在学习《unix环境高级编程》第二版的过程中,书中给出了一些套接字在应用过程中常见的代码模块,分别是:①服务器的套接字初始化②客户端建立到服务器的连接③面向连接的,客户端接收数据的代码④面向连接的,服务器发送数据的代码⑤无连接的,客户端接收数据的代码⑥无连接的,服务器发送数据的代码下面分别对这几个代码模块进行说明。①服务器套接字初始化:主要做的事:通过地址、原创 2012-07-23 16:25:59 · 1230 阅读 · 0 评论 -
套接字中的一些数据格式的转换与统一
由于网络协议族的不同、大小端的不同、人与机器对数据的识别不同,所以要对一些数据结构进行统一和转换。1.对于网络协议族:有IPV4,IPV6,UNIX,DATALINK等的不用,导致他们对应的套接字地址结构也不同。 ipv4的套接字地址结构 struct sockaddr_in { unit8_t sin_len;原创 2012-07-22 17:11:21 · 644 阅读 · 0 评论 -
我对内存地址大小的理解
对应32位的系统,内存地址占4个字节,对于64位系统,内存地址占8字节。为什么会占有这些字节呢?可以如下理解:32位系统寻址范围是2的32次方,即最大的地址可能要达到2的32次方,如果要存储这么大的数据肯定需要4字节了。同理64位系统,需要8字节。原创 2012-07-22 13:18:56 · 1144 阅读 · 0 评论 -
我对getaddrinfo的理解
getaddrinfo这个函数,从函数名上可以理解为获得地址信息。主要的作用就是通过“主机名”或者“服务名”获得地址的信息。其实该函数返回的是一个结构体链表。而每个结构中含有有关地址的信息,不仅仅是地址。其接口形式如下:int getaddrinfo(const char *restrict host,const char *restrict service,const struct原创 2012-07-23 11:12:38 · 1508 阅读 · 0 评论 -
我对“值----结果参数”的理解
值——结果参数,就是这么一种参数:传递的方向不同,导致其值和性质做改变。所谓传递的方向指的是从用户空间传递到内核,还是内核传递到用户空间。当一个进程进行系统调用,把参数从用户空间传递到内核时,往往传递的是一个值,即按值传递。当一个进程进行系统调用,把上次从用户空间传递到内核时的参数,从内核传递到用户空间时,传递的是指向该参数的指针,即按址传递。这个”值——结果“参数用在套接字地原创 2012-07-22 09:43:46 · 2299 阅读 · 0 评论 -
我对open close dup的理解
要想对open 和close进行更为深入的理解,首先要理解一个结构关系如下图所示:首先文件描述符是归进程所有的,一、如果一个进程引用了open①那么他就建立一个文件表,和V节点表。②并将文件描述符指向该文件表,同时将文件表中的v节点指针指向V节点表。二、文件表中的信息有:①文件状态标志,主要标明了文件描述符的性质而不是文件的性质!!!,即只读、只写、读写、追原创 2012-07-20 14:41:36 · 2320 阅读 · 0 评论 -
我对进程用户ID的理解
一、进程的用户ID可分为三种:实际用户ID,有效用户ID,以及保存的设置用户ID。二、下面分别解释这三种用户ID进行解释。实际用户ID:就是使用这个进程的用户。往往是通过终端登录的用户。比如我现在已cs名登录了linux并且运行了一个程序,那么这个程序的实际用户ID就是cs有效用户ID:这个主要用于对文件的访问权限(注意:是文件而非进程)。一个文件的用户ID即文件的拥有者,也就是这个文原创 2012-07-20 22:10:59 · 766 阅读 · 0 评论 -
TCP/IP七层协议详解
转自:http://www.testage.net/html/78/n-1678.htmlTCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。以下我们对协议族中一些常用协议英文名称和用途作一介绍: TCP(Transport Control Protoc转载 2012-07-21 09:58:27 · 6775 阅读 · 0 评论 -
我对IO多路转换的理解
一、 首先明确,IO多路转换是用来干啥滴:IO多路转换多用于一个进程有多个输入多个输出的情况。二、 其次要明白, 对于多路对于多个输入多个输出的情况,可以用多种方法:①直接一个进程用阻塞IO②分成多个进程分别进行IO读写③一个进程中用多个线程进行④用异步IO三、 然后就是说明,IO多路转换相对于其他方法的优点了。首先说说其他方法的缺点:①对于直接用一个进程进行阻塞IO,显然的任何一个I原创 2012-07-20 11:21:26 · 573 阅读 · 0 评论 -
我对套接字描述符的理解
一、首先明确 啥是“套接字”——所谓套接字就是对通信端点的抽象。套接字描述符——就如程序通过文件描述符访问文件一样,套接字描述符是访问套接字的一种路径。从某种意义上说,套接字也在文件,所以许多对文件描述符使用的函数,对套接字描述符同样适用,但是有些是不可使用的。二、与套接字相关的两个函数:int socket(int domain,int type,int protocol) /*返回原创 2012-07-20 13:56:22 · 5274 阅读 · 0 评论 -
我对标准输入标准输出的理解
首先要明确一点:标准输入标准输出 同 一个文件的输入输出 是不同滴!不可混淆!!!1.标准输入,标准输出,以及标准出错是跟随进程的,而且标准输出,标准输出以及标准出错是“文件”更准确的说是指向文件的“文件描述符”!!!。在进程建立的时候,系统就为进程建立三个文件描述符,即标准输入,标准输出和标准出错。这三个文件描述符用于进程接收数据,发送数据,以及存储进程运行过程中的出错数据。而原创 2012-07-19 14:47:03 · 654 阅读 · 0 评论 -
我对共享存储区的理解
进程间的另一种通信方式就是共享存储区。一、为了达到共享存储区,有个相应的数据结构与之对应。通常是利用shmget建立这个结构,即建立共享存储区,然后可以用shmctl对这个结构进行相关的操作设置等。最重要的是进程调用shmat函数将该共享存储区与之相对应,如果多个进程对该共享存储区进行对应的话,就可达到进程间的通信。需要注意的是,不可同时对该共享存储区进行多个进程的同时访问,即如果一个进程原创 2012-07-18 17:28:23 · 5364 阅读 · 0 评论 -
SIGHUP
SIGHUP会在以下3种情况下被发送给相应的进程:1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程3、若夫进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每转载 2012-07-09 14:04:17 · 476 阅读 · 0 评论 -
系统调用的理解
所谓系统调用,简单的说,就是内核为用户提供的功能强大的函数。比如read ,write函数等这些函数都是在内核中编辑实现的,用户只需要把这些函数拿来用到自己的程序中即可,至于这些函数是如何实现和运行的,那是内核已经做好的事,用户只需知道这些函数有啥功能,如何使用即可。还需要知道的是,系统调用需要用户空间和内核空间的切换,即如果一个程序调用了系统函数比如read,那么程序的流程就从用户空间进入了原创 2012-07-09 20:25:56 · 659 阅读 · 0 评论 -
进程与作业的区别
来源:http://hi.baidu.com/918984025/blog/item/c1c601b78a2d17c237d3cab7.html作业与进程的区别:一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。一个作业的完成要经过作业提交、作业收容、作业执行和作业完成4个阶段。而进程是对转载 2012-07-09 19:53:40 · 1432 阅读 · 0 评论 -
execl execlp execle execv execvp execve
作用:fork后调用 exec执行新的程序,进程的其他属性并不改变。区别:execve 属于系统调用,其他则不属于系统调用,但是其他都追中要调用execve对各个字母的理解:l 即list 列出各个参数 如execl(“/bin/ls","ls","-a",(char *)0) v 即char *argv[]的形式,即参数列表形式。 p 即path,根据默认路径进行搜索原创 2012-07-05 09:00:04 · 732 阅读 · 0 评论 -
Linux 编程经典书籍推荐
来源:http://fairyfish.net/article/featured-linux-programming-books/成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标。根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍、Java 程序员的 2.6 倍, Linux 程序员年终奖金平均为 Window转载 2012-07-05 00:20:13 · 491 阅读 · 0 评论 -
【转载】硬链接 软链接
转自:http://keren.blog.51cto.com/720558/170979原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://keren.blog.51cto.com/720558/170979UNIX目录中有2中类型的链接——硬链接和符号链接。 硬链接本身就是一个目录项,(比如文件转载 2012-06-20 16:04:24 · 961 阅读 · 0 评论 -
【转】bash中的错误 too many arguments
来源:http://www.hao32.com/unix-linux/394.html我之前为了判断一个文件的内容是不是为空,使用如下语句:if test -z `cat filename`当filename为空或者只有一行没有空格的字符串的时候,一切正常,反之,则会报,诸如: too many arguments,甚至是: binary operator expected转载 2012-06-13 13:25:13 · 581 阅读 · 0 评论 -
linux bash
bash 一些指令type --------区分一个指令 内建指令 还是外部指令\ ---------跳脱指令echo --------输出指令unset ------取消变量env -------观察环境变量export -----观察环境变量,将普通变量转换为环境变量set----------观察变量declare-----声明变量类型P原创 2012-06-12 12:18:14 · 516 阅读 · 0 评论 -
bash if 错误
源码执行过程中出现的问题:原因:原因:if和[ ]之间也应有空格!!!原创 2012-06-13 16:00:36 · 349 阅读 · 0 评论 -
&& ||遇到的错误
错误出现的地方:输入不存在的文件夹 无问题,输入存在的文件夹 出现问题,之间退出 修正后的代码:小结:以后再用&& ||时 最好要将 &&放在前面!!原创 2012-06-13 14:01:04 · 304 阅读 · 0 评论