muduo
sukhoi27smk
学习是为了探索这个世界的本质
展开
-
open函数中O_CLOEXEC标志的开关
Linux中,文件描述符有一个属性:CLOEXEC,即当调用exec()函数成功后,文件描述符会自动关闭。在以往的内核版本(2.6.23以前)中,需要调用 fcntl(fd, F_SETFD, FD_CLOEXEC) 来设置这个属性。而新版本(2.6.23开始)中,可以在调用open函数的时候,通过 flags 参数设置 CLOEXEC 功能,如 open(filename, O_CLOEXE转载 2014-05-08 17:23:50 · 2328 阅读 · 0 评论 -
linux 中 timeval结构体
网上很多人写到,timeval结构解释错误*******************************************************************问题如下:在debian linux的man页中对gettimeofday函数的说明中,有这样一个说明:DESCRIPTION The functions gettimeofday and sett转载 2014-07-21 17:11:46 · 1047 阅读 · 0 评论 -
epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 ep转载 2014-06-11 16:35:27 · 772 阅读 · 0 评论 -
vector利用swap()函数进行内存的释放
首先,vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。1、释放内存: empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。如果你需要空间动态缩转载 2014-05-29 11:23:50 · 27724 阅读 · 1 评论 -
Linux下获取线程TID的方法——gettid()
如何获取进程的PID(process ID)?可以使用:#include pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息:find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/include/bits/unistd.h /usr/inc转载 2014-05-28 11:45:00 · 1648 阅读 · 0 评论 -
__thread 和 __typeof__关键字
__thread:在多线程变成中,使用于global变量,使每个线程都私有一份。static __thread int count;void *function1(void *argc){printf("porgran pid:%u, the function1 pthread id is %lu, count:%d\n",getpid(), pthread_self(), c转载 2015-06-16 13:51:02 · 1161 阅读 · 0 评论 -
C++11 标准新特性: 右值引用与转移语义
原文地址http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/C++ 的新标准 C++11 已经发布一段时间了。本文介绍了新标准中的一个特性,右值引用和转移语义。这个特性能够使代码更加简洁高效。新特性的目的右值引用 (Rvalue Referene) 是 C++ 新标准 (C转载 2015-06-17 14:11:16 · 529 阅读 · 0 评论 -
C++11 标准新特性: 右值引用与转移语义(点评)
对MyString那个例子来说。我写了三个测试用例。1. MyString a;a = MyString("Hello"); //调用转移构造函数std::vector vec; vec.push_back(MyString("World")); //调用转移赋值函数原创 2015-06-17 15:30:22 · 904 阅读 · 0 评论 -
C++中正确使用PRId64
nt64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:[cpp] view plaincopyprintf("%ld", value); // 64bit OS printf("%lld", value); // 32bit OS 当转载 2015-06-18 14:31:02 · 650 阅读 · 0 评论 -
容器set和multiset
一、set和multiset基础set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。需要包含头文件:#include set和multiset都是定义在std空间里的类模板:[cpp] view plaincopyprint?templatecla转载 2015-06-18 17:34:14 · 554 阅读 · 0 评论 -
std::set作为一个有序集合
摘要:std::set作为标准库的一个关联容器,实现内部元素进行了排序,使用这特性可以对一组元素进行插入排序。std::set最初的设计是完成数学中“集合”的概念,它提供的接口也是如此。本文简单地介绍一下这一个标准库容器。为了使用std::set,我只需要如下:#include//定义一个整型数据的集合std::setint> set;如同所有的STL容转载 2015-06-19 10:39:34 · 853 阅读 · 0 评论 -
linux 系统调用
5.1.5 如何使用系统调用如图5.2所示,用户应用可以通过两种方式使用系统调用。第一种方式是通过C库函数,包括系统调用在C库中的封装函数和其他普通函数。 图5.2 使用系统调用的两种方式第二种方式是使用_syscall宏。2.6.18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,分别是:转载 2014-05-27 17:59:11 · 781 阅读 · 0 评论 -
ACCEPT
ACCEPT章节:Linux 程序员手册 (2)更新:2010-09-10到 易美翻译 翻译名字accept - 通过套接口接受一个连接概要#include Esys/types.h> /* 参看 “注意小节” */#include Esys/socket.h>int accept(int sockfd, struct sockaddr *addr,转载 2014-06-11 14:50:57 · 896 阅读 · 0 评论 -
__builtin_expect详解
在GTK+2.0源码中有很多这样的宏:G_LIKELY和G_UNLIKELY。比如下面这段代码:if (G_LIKELY (acat == 1)) /* allocate through magazine layer */ { ThreadMemory *tmem = thread_memory_from_self(); guint ix =转载 2014-06-11 13:44:30 · 681 阅读 · 0 评论 -
cmake 学习笔记(一)
最大的Qt4程序群(KDE4)采用cmake作为构建系统Qt4的python绑定(pyside)采用了cmake作为构建系统开源的图像处理库 opencv 采用cmake 作为构建系统...看来不学习一下cmake是不行了,一点一点来吧,找个最简单的C程序,慢慢复杂化,试试看:例子一单个源文件 main.c例子二==>分解成多转载 2014-05-15 14:49:55 · 631 阅读 · 0 评论 -
CMake使用入门
一、开胃菜hello目录下的文件结构:├—— CMakeLists.txt├—— hello.c├—— hello.h└—— main.cC代码见下节。最简单的cmake配置文件:project(HELLO)set(SRC_LIST main.c hello.c)add_executable(hello ${SRC_LIST})如果要编译成gdb可调试的debug转载 2014-05-15 14:25:30 · 671 阅读 · 0 评论 -
GCC 提供的原子操作
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and转载 2014-05-20 16:22:57 · 622 阅读 · 0 评论 -
各个层次的gcc警告
各个层次的gcc警告从上到下覆盖变量(代码)级:指定某个变量警告int a __attribute__ ((unused));指定该变量为"未使用的".即使这个变量没有被使用,编译时也会忽略则个警告输出.文件级:在源代码文件中诊断(忽略/警告)语法:#pragma GCC diagnostic [error|warning|ignor转载 2014-06-04 14:56:07 · 891 阅读 · 0 评论 -
GCC 使用摘记
1. 几个子程序和说明cc1C 的实际编译程序cc1plusC++ 的实际编译程序collect2在不使用 GNU连接程序的系统上,用来产生特定的全局初始化代码crt0.o为每个系统定制的初始化和结束代码libgcc默认连接的 gcc 例程库libstdc++默认连接的 g++ 例程库转载 2014-06-04 15:08:15 · 655 阅读 · 0 评论 -
eventfd以及epoll原理分析
这两天公司代码中用到了epoll。然后在跟同事闲扯的过程中发现了Linux中有eventfd。两者虽然名字看起来差不多,但是相关性倒是不多。为了弄明白这两个东西到底在内核上是怎么实现的,这两天将内核这两个部分的相关代码看了下,也终于明白了这两个东西的实现机制。后续几篇博客我尽量将这两个东西的工作原理阐述清楚,但是自己的语言表达能力比较差,也只能是尽量了。今天这篇博客首先是介绍两者的转载 2014-06-05 17:31:36 · 1121 阅读 · 0 评论 -
getsockname与getpeername
getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen);int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * ad转载 2014-06-25 17:55:49 · 782 阅读 · 0 评论 -
Linux中的EAGAIN含义
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞转载 2014-06-25 11:48:22 · 767 阅读 · 0 评论 -
C++中正确使用PRId64
nt64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:[cpp] view plaincopyprintf("%ld", value); // 64bit OS printf("%lld", value); // 32bit OS 当然有跨平台的方法:转载 2014-07-21 17:06:22 · 4745 阅读 · 0 评论 -
linux新的API signalfd、timerfd、eventfd使用说明
三种新的fd加入linux内核的的版本:signalfd:2.6.22timerfd:2.6.25eventfd:2.6.22三种fd的意义:signalfd:传统的处理信号的方式是注册信号处理函数;由于信号是异步发生的,要解决数据的并发访问,可重入问题。signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select、pol转载 2014-06-11 16:41:06 · 722 阅读 · 0 评论 -
muduo for v210
目标:将muduo移植到v210上面内核版本:2.6.35.71. 修改最上层的CMakeLists.txt 1) 在CXX_FLAGS里,加上-DVALGRIND,这样SocketsOps.cc就不会报错了。 2) 在CXX_FLAGS里,去掉-march=native 3) set(CMAKE_FIND_ROOT_PATH "交叉工具链目录")原创 2015-06-04 14:38:15 · 774 阅读 · 0 评论