Unix/linux
文章平均质量分 66
clearriver
做一番一生引以为豪的事业;找一个一生荣辱与共的妻子;在有生之年报答帮助我的人;并且帮助有需要我帮助的人!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
库函数和系统调用的区别
Unix操作系统设计上的陈述:理解库函数的区别和系统调用,首先要里理解Unix的kernel mode和user mode。考虑下面的函数段:int main(){ int fd = create("filename",0666); exit(0);}在执行main函数时,是在user mode下执行,当遇到create函数时,继续在user mode下执行。然原创 2009-05-05 20:26:00 · 6847 阅读 · 3 评论 -
简单的web服务器:shhttpd
作为学习网络编程的入门复习,这两天参考了一些程序和文档,自己动手写了一个小型的http服务器,作为网络编程的练习。目前服务器只能简单的支持以下功能:支持:GET/POST方法返回普通文件处理cgi(由于cgi我不太熟,测试时只用一个shell脚本代替,忽略了cgi程序的输入)目前还不支持目录的浏览和文件下载,这是以后想要做的,感觉也不难,只是和联系网络编程关系不大,呵呵~原创 2009-10-30 21:20:00 · 623 阅读 · 0 评论 -
支持并发的多人聊天程序
下载链接http://clearriver.download.youkuaiyun.com/http://download.youkuaiyun.com/source/1816684注:这是师弟妹们的一么课程的大作业,我就为了练练手来做的,时间比较仓促,里面有很多粗鲁的实现:(1) 一些信号没有做处理(2) 一些同步没有做(3)原创 2009-11-14 18:02:00 · 1496 阅读 · 0 评论 -
Linux 多线程应用中如何编写安全的信号处理函数
http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/index.html转载 2009-11-17 17:01:00 · 592 阅读 · 0 评论 -
IO复用之epoll
epoll学习笔记在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#转载 2010-01-25 22:08:00 · 924 阅读 · 0 评论 -
GCC编译器参数
http://hi.baidu.com/ganss/blog/item/656b095432b65f56574e0074.htmlGCC编译器参数除了最简单的运行gcc/g++ filename(这样只能运行最简单的小程序)外,GCC都需要用各种选项来实现其强大的功能。下面是GCC的一些常用选项描述:生成特定格式的文件:-E 只激活预处理,但不转载 2010-03-21 18:01:00 · 837 阅读 · 0 评论 -
brk(),sbrk(),malloc(),calloc()
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理下将虚拟地址转载 2010-03-27 20:34:00 · 1783 阅读 · 0 评论 -
linux下core文件
(原文链接:http://www.51testing.com/?uid-159438-action-viewspace-itemid-102761) 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制-----------------转载 2010-03-31 14:37:00 · 656 阅读 · 0 评论 -
安装Hypertable源码过程中遇到的一些问题
由于这两天要调研一下hypertable的实现,需要安装源码级的hypertable,安装过程中遇到了一些问题,折腾了两天,最后算是解决了:1,ubuntu源设置最新(这点很重要,许多依赖包在安装过程中要下载)2,由于在实验室必须通过代理上外网,安装过程中会提示有很多依赖包不能下载,这时需要手动下载,放到指定目录~/hypertable$ vi bin/src-utils/htbuild注释掉原创 2010-04-09 08:38:00 · 1235 阅读 · 0 评论 -
转载一个关于阻塞/非阻塞以及同步/异步IO的分析
<br />http://www.ibm.com/developerworks/cn/linux/l-async/转载 2010-07-27 12:59:00 · 667 阅读 · 0 评论 -
信号可重入线程安全
信号可重入线程安全2009-08-28 16:54之所以把这几个概念放一起,是因为它们组合在一起容易出现一些莫名其妙的错误,而且一旦出现,还很难被发现。更糟糕的是它们的出现需要一定的时间,并不是非常容易重现的,而且需要了解的比较多才能更好的理解它们发生的原因。<br />这里要用例子阐述一下。<br /><br />信号的是UNIX系统上是最原始的进程间通信方式之一(参考<<UNIX环境高级编程>>以及<<UNIX操作系统设计>>),信号本身不能携带任何的数据,只能通知别的进程表示某个事件,比如Ctrl-C转载 2010-08-02 18:33:00 · 792 阅读 · 0 评论 -
Linux 线程模型的比较:LinuxThreads 和 NPTL
http://www.ibm.com/developerworks/cn/linux/l-threading.htmlLinuxThreads 项目最初将多线程的概念引入了 Linux®,但是 LinuxThreads 并不遵守 POSIX 线程标准。尽管更新的 Native POSIX Thread Library(NPTL)库填补了一些空白,但是这仍然存在一些问题。本文为那些需要将自己的应用程序从 LinuxThreads 移植到 NPTL 上或者只是希望理解有何区别的开发人员介绍这两种 Linux 线转载 2010-08-18 16:01:00 · 673 阅读 · 0 评论 -
linux虚拟进程地址映射机制
6. 4 地址映射机制转自:http://www.eefocus.com/html/09-06/74979s.shtml顾名思义地址映射就是建立几种存储媒介(内存,辅存,虚存)间的关联,完成地址间的相互转换,它既包括磁盘文件到虚拟内存的映射,也包括虚拟内存到物理内存的映射,如图6.13所示。本节主要讨论磁盘文件到虚拟内存的映射,虚拟内存到物理内存的映射实际上是请页机制完成的(请看下节)。6.4.1 描述虚拟空间的数据结构前几节介绍的数据结构如存储节点(node)、管理区(zone)、页面(page)及空闲区转载 2010-08-20 10:37:00 · 3432 阅读 · 0 评论 -
Linux中tty、pty、pts的概念区别
document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text");转载 2009-10-22 10:30:00 · 609 阅读 · 0 评论 -
gdb多进程调试示例
http://bigwhite.blogbus.com/logs/1801699.html众所周知,GDB是Unix/Linux下调试程序的龙头老大,GDB功能强大,我们在平时多使用其一些最基本的功能,而且一般调试的都是单进程的程序。最近一个项目中的问题让我接触如何使用GDB调试多进程程序,更确切的是说调试调用fork的多进程程序。使用GDB最好的文档就是其名为Debugging with转载 2009-09-01 22:18:00 · 2939 阅读 · 0 评论 -
创建进程库函数fork
Unix操作系统提供了库函数fork来创建一个新的进程,本文分析一下fork调用背后发生了什么。例如:int pid = fork();从fork函数返回,父进程(pid !=0)和子进程(pid=0)拥有相同的user-leverl context(包括data,text以及stack)的拷贝。fork函数的调用发生了下列一些列的操作:1,它为新创建的子进程在process ta原创 2009-05-06 22:38:00 · 1076 阅读 · 0 评论 -
系统调用exit和wait
在Unix OS中,通过执行系统调用exit来终止一个进程。进程可以显示的调用exit系统调用来终止一个进程,也可以通过在程序结束时的return来实现(startup routine调用exit当一个C程序从main函数返回时)。调用exit方式如下: exit(status);status是返回给父进程的终止code。当一个进程exit后,这个进程处于zombie s原创 2009-05-09 15:36:00 · 2926 阅读 · 0 评论 -
unix中的signal处理过程
Unix中的signal用于通知进程中发生了异步事件。用户可以通过kill系统调用发送一个信号,kernel自己内部也可以发送信号给一个进程。进程对信号可以有三种处理方式:忽略,处理和默认(exit)。为了发送一个信号给一个进程,内核设置相对应于信号的bit位在进程的process table entry中,例如如果进程收到一个kill signal,它将设置相应的bit位在process原创 2009-05-07 22:06:00 · 1247 阅读 · 0 评论 -
Linux操作系统的头文件和库文件搜索路径
Linux操作系统的头文件和库文件搜索路径Include的header文件,动态链接库,系统定义,总共有下列来源指定gcc去那里找。 当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 ,内定的,这是当初c转载 2009-05-15 23:16:00 · 2088 阅读 · 0 评论 -
关于linux环境变量文件
etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执转载 2009-06-02 16:07:00 · 3308 阅读 · 2 评论 -
环境变量和shell变量
14.1 本地变量本地变量在用户现在的shell 生命期的脚本中使用.这个值只在当前用户生命期有意义,如果在shell启动另一个进程或退出,此值将无效.使用变量时,如果用花括号将之括起来,可以防止shell 误解变量值.要设置一本地变量,格式为:$variable-name=value ${variable-name=value}14.2 显示变量使用echo 可以显示变量转载 2009-06-02 16:52:00 · 2545 阅读 · 0 评论 -
GCC生成静态库和动态库
Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。Gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。 一、库文件简介简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库转载 2009-06-02 23:02:00 · 856 阅读 · 0 评论 -
动态链接库加载出错:cannot restore segment prot after reloc: Permission denied
作为菜鸟,几次想学LINUX的动态链接库,在网上也找了不少资源,却每次都被同一个问题挡在门外.就是在我执行程序时,总是遇到加载so文件时的错误.我按照网上说的,又是改LD_LIBRARY_PATH又是改ld.so.conf配置文件,结果都无济于事.后来找人一问,才知道原来不是它的错误,而是 Linux 内核中提供的强制访问控制 (MAC)系统SELINUX的原因. 在百转载 2009-06-13 17:28:00 · 2477 阅读 · 1 评论 -
Linux平台gcc及动态库和静态库
对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不太熟悉,姑且写点基础知识,权当做备忘吧。 一、GNU gcc的编译工具用法 我们先来写一个简单的C程序:hello.c #include void print_hello() { printf("Hello World/n");}int转载 2009-06-13 21:30:00 · 871 阅读 · 0 评论 -
TCPDUMP简介
TCPDUMP简介在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。 用过w转载 2009-06-12 11:22:00 · 551 阅读 · 0 评论 -
System V Message Queue程序示例——简单C/S通信
msg.h:#include "../../ch06.h"#define MSG1 "../msg1" #define MSG2 "../msg2" client_main.c:#include "../msg.h"extern client(int,int);int main(){ int wrmqid = msgget(ftok(MSG1,0),0200);/原创 2009-08-29 22:50:00 · 1066 阅读 · 0 评论 -
SIGHUP信号与控制终端
UNIX中进程组织结构为 session (会话)包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。这儿是可能会有,在一定情况之下是没有的。与终端交互的进程是前台进程,否则便是后台进程。 SIGHUP会在转载 2009-06-28 17:03:00 · 1440 阅读 · 0 评论 -
Linux内核编译后地址空间的整理
<br />Linux内核编译后地址空间的整理 有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核编译后地址空间在什么范围内?要对外设进行访问,I/O的地址空间又是什么样的?<br /> 先回答第一个问题。Linux 最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存中的实际地址,则由内核为其建立转载 2010-08-20 10:39:00 · 867 阅读 · 0 评论
分享