C/C++ in Unix/Linux
Aniao
这个作者很懒,什么都没留下…
展开
-
开始写学习笔记
现在开始记录下学习中的一点一滴,方便以后自省,也是一种自我监督原创 2010-01-24 22:07:00 · 585 阅读 · 0 评论 -
APUE第十章心得:PTHREAD_MUTEX_RECURSIVE的最大用处以及为何flockfile也是RECURSIVE的。
<br />1。为了不在信号处理程序中出现死锁。<br /> 试想,如果锁是PTHREAD_MUTEX_NORMAL的,当函数取得互斥锁之后,解锁之前进入了信号处理函数,而这个函数里也调用了这个函数或者尝试取得同样的互斥锁,那么这时就死锁了,不要说这个函数不是信号可重入有可能破坏数据完整性等,就连基本的运行都不可能。<br /> <br /> <br /> <br />2。 构造新的线程原子操作<br /> 假设已经有几个我们不可修改的函数里面用了互斥锁,比如标准IO,而我新的函数要将几个原创 2010-08-31 10:55:00 · 1474 阅读 · 0 评论 -
关于一点pthread_cond_t条件锁的思考以及实验
APUE上,关于条件锁。其中有这么几条总结:1。使用条件锁前必须先锁住对应的互斥锁。2。条件锁进入阻塞(pthread_cond_wait)时自动解开对应互斥锁,而一旦跳出阻塞立即再次取得互斥锁,而这两个操作都是原子操作。好,现在考虑到这一点,假如有如下函数:void* run(void *s){ pthread_mutex_lock(&mutex); while (i==1) { printf("线程%u进入等待状态/n",pthread_self())原创 2010-08-10 17:07:00 · 4430 阅读 · 4 评论 -
APUE第十章心得:线程安全和可重入的区别
<br />文中提到了:malloc不是可重入的,而据我所知,malloc是线程安全的。说白了,可重入和线程安全都是在调用函数的中途再次调用该函数。既然malloc对其中的静态链表对象做了线程同步,那为何还不可重入了?<br /> <br /> <br />查了一些资料,得到以下解答(来自http://bbs.chinaunix.net/thread-1445354-1-1.html的高手版主converse):<br /> <br />可重入:一个函数可以同时被调用,不会有影响<br />线程安全:一个函原创 2010-07-23 15:29:00 · 927 阅读 · 0 评论 -
【入门】用Linux中man命令查询C函数
大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如: man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事呢? 原来read本身是man命令的一个参数,这样输入man就会以为你原创 2010-01-10 10:49:00 · 5591 阅读 · 0 评论 -
在c和c++中对const修饰符的不同处理
我不会说为什么在c++中用const比define好,因为我自己都没有多好地领悟到,反而还觉得define能够完成更强大的功能,只要使用得当。 在这里要说的只是一个小技巧,给自己备忘用的。 const在C和C++中最大的不同是,在C中,const默认具有外部链接,而C++中则是内部链接,那么用起来有什么不同呢? 假如我定义了const int i = 50;原创 2010-02-23 16:30:00 · 463 阅读 · 0 评论 -
APUE第八章学习笔记,wait的隐患于waitpid的必要性
如果不用waitpid而要等到特定子进程结束,一般这么写 pid_t pid;int status;pid_t lastpid;if ((pid = fork()) { //错误处理}if (pid == 0) { //子进程工作 }else{ while ( (last_pid = wait(&status))!=原创 2010-02-03 15:04:00 · 535 阅读 · 0 评论 -
apue第八章心得,原来exec函数是替代了整个代码段和堆栈
#include #include #include #include #include #include int main (int argc, char* argv[]){ char* envi[] = {"1","2","3",NULL}; pid_t child1; if ((child1 = fork()) printf("error"); el原创 2010-02-02 00:00:00 · 640 阅读 · 0 评论 -
LINUX内核中min和max宏的学习
add linux kernel min, max define:include/linux/kernel.h/* * min()/max() macros that also do * strict type-checking.. See the * "unnecessary" pointer comparison. */#define min(x,y) /(__原创 2010-01-24 22:08:00 · 1427 阅读 · 2 评论 -
opensuse11.3在虚拟机中装vm tools遇到What is the location of the directory of C header files that match your running
<br /> 网上那么多的论坛讨论都没说清楚。,其实说白了,就是没安装或者没安装正确版本的kernel-devel,kernel-source以及kernel-syms。首先用自己的uname -r看下内核版本号,然后找对应的安装就可以了。<br /> <br /> <br /> Suse用户爽了,直接启动yast,search一下“kernel”,然后选择这三个安装就好。如果你是在虚拟机里,发现要让你塞光碟的话,那是因为你的yast源默认只有安装碟,那你就把虚拟机的光驱设置成open原创 2010-09-14 12:10:00 · 1016 阅读 · 0 评论