自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代威涛的主页

Linux C/C++ JAVA

  • 博客(21)
  • 收藏
  • 关注

原创 信号量与自旋锁(3): Linux信号量的实现

1. 定义:头文件: 数据类型: struct semaphore直接创建: void sema_init(struct semaphore *sem, int val); /* 其中val是信号量的初始值 */辅助宏: DECLARE_MUTEX(name); /* 把一个称为name的信号量变量初始化为1 */DECLARE_MUTEX_LOCKED(name); /* 把一个称为name的信

2007-06-30 13:19:00 7715 11

原创 信号量与自旋锁(2): 信号量和互斥体

1. 引言:下面我们研究如何为共享资源添加锁定.我们的目的是使所有对共享资源的操作都是原子的, 也就是说, 在操作该共享资源的其他线程执行前, 本线程对该资源的整个操作就已经完成了. 对我们下面要说的内存泄露的举例来说, 需要确保当一个线程(如B)发现特定内存块需要分配时, 它拥有执行分配的执行权力, 并且需要在其他线程(如A, C, D...)执行同一测试之前完成这个工作. 为此, 我们必须建立

2007-06-30 12:22:00 1859

原创 信号量与自旋锁(1): 并发和竞态

1. 概念: 操作系统中存在大量的并发访问, 因此会导致竞态的可能性. 竞态通常由于对资源的共享所产生. 当两个执行线程对相同的数据结构(或硬件资源)进行访问时, 这种可能性就永远存在. 因此, 首要的原则是:在设计过程中, 应该尽量避免这种情况的发生. 但事实是, 这样的共享的大多数情况下是必须的, 包括硬件资源, 全局变量, 指针多向传递等等.

2007-06-30 11:57:00 1430

原创 调试技术: Linux core dump file

1. 前言:有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.2. gdb:有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员.我

2007-06-27 23:12:00 3652 3

原创 进程环境与进程控制(5): 进程时间

#include sys/times.h>clock_t times(struct tms *buf);返回值: 若成功则返回流逝的墙上时钟时间, 若出错返回-1.所有由此函数返回的clock_t值都用_SC_CLK_TCK变换成秒数.(由sysconf函数返回的每秒时钟滴答数)此函数填写由buf指向的tms结构, 该结构定义如下:struct tms...{    clock

2007-06-22 17:16:00 1147 2

原创 进程环境与进程控制(4): exec函数

1. 函数声明:#include int execl(const char *pathname, const char *arg0, ... /* (char *) 0 */);int execv(const char *pathname, char *const argv []);int execle(const char *pathname, const char *arg0, ... /*

2007-06-21 22:10:00 1295

原创 进程环境与进程控制(3): 等待子进程wait/waitpid

当父进程通过fork创建了子进程之后, 父进程和子进程的执行顺序是无法控制的. 如果想控制, 有两种办法: 使用vfork创建或者父进程调用等待函数wait.关于fork和vfork的区别, 请参考APUE, 以后也我也会写相关的文章具体解释.这篇文章主要介绍wait和类似的waitpid调用.1. 当进程终止时, 会向其父进程发送SIGCHLD信号, 这个异步事件可以在父进程运行的任何时候发生,

2007-06-17 22:21:00 3114 4

转载 Linux动态库(.so)搜索路径

      众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及 该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三

2007-06-14 23:50:00 1226

原创 进程环境与进程控制(2): 堆和栈

1.  C/C++编译的程序, 内存分为以下几个部分(从低地址到高地址):代码(text): 在可用内存的最低地址区, 存放程序函数的二进制代码和程序中所使用的常量, 函数调用是通过函数地址实现的.全局已初始化数据(initialized data): 包括已初始化变量和已初始化的静态变量, 程序结束后自动释放.全局未初始化数据(uninitialized data): 包括未初始化变量和未初始化

2007-06-14 23:00:00 1263 3

原创 进程环境与进程控制(1): 进程的开始与终止

1. 进程的开始:C程序是从main函数开始执行, 原型如下:int main(int argc, char *argv[]);通常main的返回值是int型, 正确返回0. 如果main的返回值为void或者无, 某些编译器会给出警告, 此时main的返回值通常是0.关于main的命令行参数不做过多解释, 以下面的程序展示一下:#include int main(int argc

2007-06-14 11:08:00 1061 4

原创 Ubuntu7.04下安装和配置Pidgin

Pidgin2.0.1已经出来了, 支持MSN, QQ, YAHOO, GTALK等即时通讯协议.解决了Gaim上不了QQ的问题, 但需要一些修改, 下面详细介绍步骤:1. 下载源代码: http://www.gaimcn.com/deploy/pidgin-2.0.1.tar.bz22. tar -jvxf解压缩, 得到pidgin-2.0.1目录.3. 修改源代码, 使支持QQ, 进入/pid

2007-06-12 22:28:00 1411 3

转载 Unbufferd I/O和Standard I/O

    首先说说不带缓存的I/O,UNIX的文件I/O read、write是不带缓存的。不带缓存是指每个read、write都调用内核的一个系统调用,它们是POSIX.1的组成部分。二者的原型为:    ssize_t read( int filedes, void* buf, size_t nbytes );    // 若成功返回读到的字节数    ssize_t write( in

2007-06-10 23:28:00 839

转载 集MSN, QQ于一身的Pidgin 2.0.0

经过一年多的 beta 后 Pidgin 2.0.0 正式版终于在前些天发布了,在发布这个新版时,官方主页也 重新制作了一遍。和没改名前的 Gaim 2.0.0 beta6 相比外观上也发生了一下变化,重新设计的图标比以前更精致,Tango 风格,开始支持 16~48 不同大小,在好友列表面板上的名字前,都统一使用在线状态代替以前显示的协议图标,这样看起来更加直观。Pidgin 2.0.0 把

2007-06-10 21:44:00 806

转载 BIOS和CMOS的区别

BIOS与CMOS区别       在日常操作和维护计算机的过程中,常常可以听到有关BIOS设置和CMOS设置的一些说法,许多人对BIOS和CMOS经常混为一谈。本文主要阐述对BIOS设置和CMOS设置在基本概念上的区分与联系。     BIOS是什么?  所谓BIOS,实际上就是微机的基本输入输出系统(Basic Input-Output System),其内容集成在微机主板上的一个RO

2007-06-10 17:30:00 904

原创 创建进程fork

名称: fork作用: 创建进程文件: #include 定义: pid_t fork(void);说明: fork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承 父进程的用户代码,组代码,环境变量、已打开的文件代码、工作目录和资源限制等。Linux 使用copy-on-write(COW)技术,只有当其中一进程试图修改欲复制的空间时才会做真正的复制动作,由于这些继承的信

2007-06-10 17:17:00 1370

原创 简单配置你的vimrc

"一般设置.set nocompatible "VIM而不是VIset history=50 "历史记录50条set fenc=utf-8 "设置默认语言为8位unicodeman Q gq "屏蔽Q, 以免进入Ex模式filetype on "打开文件类型检测"颜色设置.colorscheme evening "主题syntax on "语法高亮"界面设置.set ruler "显示当前位置se

2007-06-08 10:59:00 6324

转载 vsftpd应用

介绍VSFTPD的具体应用方法。1、允许匿名用户上传文件  在vsftpd.conf文件中修改或增加以下选项:  write_enable=YES  anon_world_readable_only=NO  anon_upload_enable=YES  anon_mkdir_write_enable=YES  然后创建供匿名用户上传文件的目录,并设定权限:  # mkdir /var/ftp/i

2007-06-05 12:07:00 929

原创 Linux中通用链表(list)的解析(6)

介绍一些list的iterate over函数:1. #define list_for_each(pos, head) /    for (pos = (head)->next; prefetch(pos->next), pos != (head); /            pos = pos->next)关于这个遍历的循环似乎没什么好说的, 从head->next开始, 用next指针遍历,

2007-06-04 17:38:00 1567

原创 Linux中通用链表(list)的解析(5)

介绍一下list中的关键函数container_of:/** * list_entry - get the struct for this entry * @ptr:    the &struct list_head pointer. * @type:    the type of the struct this is embedded in. * @member:    the name of

2007-06-04 15:55:00 1270 1

原创 Linux中通用链表(list)的解析(4)

下面介绍Linux通用链表(list)的splice(合并)函数:1. static inline void __list_splice(struct list_head *list,                 struct list_head *head){    struct list_head *first = list->next;    struct list_head *last

2007-06-01 15:53:00 1510

原创 Linux中通用链表(list)的解析(3)

 下面说一下list的move相关函数和empty相关判断函数:1. static inline void list_move(struct list_head *list, struct list_head *head){        __list_del(list->prev, list->next);        list_add(list, head);}先解释一下参数, list是要

2007-06-01 14:24:00 1391

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除