linux and C
文章平均质量分 74
zhengzhoudaxue2
这个作者很懒,什么都没留下…
展开
-
sigaction函数的详解
本文主要参考《unix环境高级编程》 sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。 <br />intsigaction(int signo,conststructsigaction*restrict act,<br /> structsigaction*restrict oact);<br />结构sigaction定义如下:<br />structsigaction{<br /> void(*sa_handler)原创 2010-12-16 10:33:00 · 3574 阅读 · 0 评论 -
linux进程调度器模拟
Linux 中的调度任务是一项复杂的任务。Linux 能在各种机型(如企业服务器、客户端桌面、甚至嵌入式设备)上运行,涉及的处理器拓扑结构范围非常广泛(单核、多核、多核/多线程等等)。但是令人惊讶的是,在 Linux 中只是少量的调度策略在工作。更糟糕的是,在 Linux 中测量调度策略的效率很困难,因为调度器位于内核深处。添加跟踪等自检功能实际上更改了调度器的行为并隐藏缺陷或低效率。甚至,建立调度方案以便在各种处理器拓扑中验证给定的工作负荷,您要做好应对烦恼的准备。幸运的是,类似 LinSched(用户空转载 2011-04-25 17:23:00 · 1449 阅读 · 0 评论 -
linux下编程的段错误的解决办法
<br />简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.<br /><br />一般来说, 段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与转载 2011-04-23 12:00:00 · 1573 阅读 · 0 评论 -
Linux2.6的页面回收机制
为什么要进行页面回收操作系统管理内存中的物理页面,同时也担任着内存分配的职责。应用程序可以通过内存分配函数向操作系统申请物理页面;在使用完这些物理页面之后,应用程序可以通过相应的内存释放函数释放这些物理页面。但是,对于内存中的某些物理页面来说,页面的使用者并不会主动释放它们,如果这些物理页面一直被占用而得不到释放,那么无论计算机上可用的物理内存有多少,物理内存迟早都有被用完的时候。所以,对于无法被主动释放的物理页面来说,操作系统就需要提供相应的功能去释放它们,Linux 中提供页面回收算法这样一种机制进行页转载 2011-04-18 21:51:00 · 1505 阅读 · 1 评论 -
Linux套接字编程中的五个隐患
在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性。事实上,很难找到一种不支持 Sockets API 的现代语言。该 API 相当简单,但新的开发人员仍然会遇到一些常见的隐患。本文识别那些隐患并向您显示如何避开它们。隐患 1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一个返回状态,而不是忽略它们。考虑清转载 2011-05-26 23:13:00 · 1423 阅读 · 4 评论 -
gdb调试技术1
<br />1.库文件简介<br />库文件是一个包含了编译后代码、数据的文件,用于与程序其他代码连编,它可以使得程序模块化、编译速度更快,并且易于更新。库文件分为三种(实质为两种,在随后两句话有解释):静态库(在程序之前就已经装载进其中了)、共享库(在程序启动之时加载进去,在程序直接共享)、动态加载库(dynamically loaded,DL)(在程序运行中任何时候都可以被加载进程序中使用,事实上DL并非是一个完全不同的库类型,共享库可以用作DL而被动态加载(静态库在Linux貌似无法用dlopen转载 2011-02-21 12:29:00 · 1342 阅读 · 0 评论 -
gdb调试技术3
<br />本文首先以一个二叉树插入算法的实现作为例子说明GDB查看程序数据的相关方法,代码如下: 1: // bintree.c: routines to do insert and sorted print of a binary tree 2: 3: #include 4: #include 5: 6: struct node { 7: int val; // stored value 8: struct转载 2011-02-21 12:33:00 · 864 阅读 · 0 评论 -
gdb调试技术2
<br />1.让程序停下来的三种模式断点(breakpoint):让程序在特定的地点停止执行。 观察点(watchpoint):让程序在特定的内存地址(或者是一个涉及多个地址的表达式)的值发生变化时停止执行。注意,你不能给一个尚没有在栈帧中的表达式或变量设定观察点,换句话说,常常在程序停下来后才去设置观察点。在设定观察点后,栈帧中不存在所监控的变量时,观察点自动删除。 捕捉点(catchpoint):让程序在发生特定事件时停止执行。 <br />注:GDB文档中统称这三种程序暂停手段为breakpoi转载 2011-02-21 12:32:00 · 6110 阅读 · 0 评论 -
用C实现程序的多态性
<br />前言:关于多态,关于 C<br />多态 (polymorphism) 一词最初来源于希腊语 polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。然而在人们的直观感觉中,多态的含义大约等同于“同一个方法对于不同类型的输入参数均能做出正确的处理过程,并给出人们所期望获得的结果”,也许这正体现了人们对于多态性所能达到的效果所寄予的期望:使程序能够做到越来越智能化,越来越易于使用,越来越能够使设计者透过形形色色原创 2011-01-07 22:34:00 · 916 阅读 · 2 评论 -
对话unix——unix高手的秘密
如果您想知道我为何佩戴黑色太阳镜、假胡须和棒球帽(模仿一个专业冰壶球队 The Floating Stones 的徽标),那是因为我正在逃亡之中。我正在躲避黑色的遥控直升机、面色苍白的系统管理员和许多 “妖魔鬼怪” 的追踪,我这样做的目的只有一个,就是向您披露 UNIX® 高手的重大秘密。请戴上您的铝箔帽阅读本文吧! 保存环境变量大多数 UNIX 用户在 .bashrc(针对 Bash shell)和 .zshrc(针对 Z shell)等 shell 启动文件中塞满大量用户设置,以便一次又一次地重建钟爱的转载 2011-01-06 19:35:00 · 905 阅读 · 0 评论 -
unix网络栈
协议简介(我不知打怎么插入图片,抱歉了)虽然对于网络的正式介绍一般都参考了 OSI(Open Systems Interconnection)模型,但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型(如图 1 所示)。图 1. 网络栈的 Internet 模型这个栈的最底部是链路层。链路层是指提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。链路层上面是网络层,它负责将报文定向到目标位置。再上一层称为传输层,负责端到端的通信(例如,在一台主机内部)。尽管网转载 2011-01-06 19:29:00 · 884 阅读 · 0 评论 -
linuxIPC——消息队列
<br />1. 消息队列<br />1.1消息队列<br />消息队列是消息的链接表,存放着内核中由消息队列标识符标识。消息队列简称队列(queue),其标识符为队列ID(queue ID)。<br />每个队列都有一个msqid_ds结构与其相关联:<br />struct msqid_ds{<br />struct ipc_perm msg_perm; //<br />msgqnum_t msg_qnum; // # of messages on queue<br />msglen_t转载 2011-01-06 10:35:00 · 1026 阅读 · 0 评论 -
技巧:在 C/C++中如何构造通用的对象链表
<br />一个简化的问题示例<br />链表的难点在于必须复制链表处理函数来处理不同的对象,即便逻辑是完全相同的。例如:<br />两个结构类似的链表<br />struct Struct_Object_A{ int a; int b; Struct_Object_A *next;} OBJECT_A;typedef struct Struct_Object_B{ int a; int b; int c; Struct_原创 2011-01-01 23:44:00 · 562 阅读 · 0 评论 -
linux高级IO——记录锁
<br />1.记录锁的功能<br /> 当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。我们不应该从字面上去理解记录锁,实际上它应该叫“区域锁”,因为它锁定的只是文件的一个(也可能是整个文件)。这个区域用来存放多用户的共享区。<br />2.记录锁的分类<br /> 记录锁分为共享读锁和独占写锁,前者也叫做共享锁后者也叫做排他锁。<br />3.加锁规则<br /> 如果一个进程对共享区加了共享读锁,其他进程只能加共享读锁。如果一个进程加了独占写原创 2010-12-29 20:03:00 · 1734 阅读 · 0 评论 -
你的未来你想过?Linux和windows之见!
作者:王垠已经半年没有使用Windows的方式工作了。Linux高效的完成了我所有的工作。 GNU/Linux不是每个人都想用的。如果你只需要处理一般的事务,打游戏,那么你不需要了解下面这些了。 我不是一个狂热的自由软件份子,虽然我很喜欢自由软件。这篇文章也不是用来推行自由软件运动的,虽然我觉得自由软件运动是非常好的。 这篇文章也不是用来比较Linux和Windows内核效率,文件系统,网络服务的。我现在是作为一个用户而不是一个开发者来说话的,我们的讨论是基于操作,应用层面的。是为了告诉大学里还不了解,或者转载 2010-10-31 11:10:00 · 1160 阅读 · 0 评论 -
C的内存分配
日志上一篇:你相信C的多态吗...下一篇:建立动态/静态链...|返回日志列表 踏入C中的雷区——内存管理详解 分享复制地址日志地址:请用Ctrl+C复制后贴给好友。转发到微博飞在天空的鱼2010年12月06日 03:49阅读(8)评论(0) 分类:个人日记权限: 公开字体:中▼小中大更多▼设置置顶权限设置推荐日志转为私密日志删除编辑伟大的B转载 2010-12-16 10:38:00 · 669 阅读 · 0 评论 -
Linux 运行32位程序步骤
由于lib-ia32这个Ubuntu不支持了,所以我查了查在64位上编译和运行32位的步骤:1,sudo apt-get install libc6-dev-i386,下载40M+的32位的库,下载这个就可以运行32位程序了,2,编译的话,使用gcc -m32 连接ld -m elf_i386进行编译和链接.o文件亲测,在Ubuntu14.10上可用!原创 2015-04-03 17:35:29 · 1446 阅读 · 0 评论