Linux后台服务器编程。
发布时间:2014-07-24 17:14:46
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对.........【阅读全文】
发布时间:2014-07-24 15:15:30
C++中真正的临时对象是看不见的,它们不出现在你的源代码中,临时对象的产生在如下几个时刻: 1. 用构造函数作为隐式类型转换函数时,会创建临时对象。例: class Integer &nb.........【阅读全文】
发布时间:2014-07-18 17:18:20
up vote8down votefavorite3I found this symbols in a function declaration several times, but i don't know what they mean, if it is something stupid I apologize for the question.lik.........【阅读全文】
发布时间:2014-07-17 17:25:11
1、环形缓冲区(下面生产者消费者的例子使用) 使用一段内存空间作为缓冲区,维护两个指针,一是读指针,指向缓冲空间的第一个可读位置;二是写指针,指向空间的第一个空位置。读取一个数据后,读指针+1,当指针位置超出缓冲区域则指向缓冲区域的头位置(置0);写入一个数据后,写指针+1,当指针位置超出缓冲.........【阅读全文】
发布时间:2014-07-16 23:06:05
现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。 1.修改/etc/profile文件如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 .........【阅读全文】
发布时间:2014-07-16 23:00:43
1 获得源码 从apue的官方网站http://www.apuebook.com/下载 源码。(点击here直接下载) 在windows下载后用U盘拷到linux系统下找个目录解压 tar -zxvf src.tar.gz 在当前目录下解压 通过pwd查看你解压的目录 这个目录要记住会在下一步中用到2 WKDIR 编辑源码解压生成的apue.2e文件 夹下的Mak.........【阅读全文】
发布时间:2014-07-16 16:33:55
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的.........【阅读全文】
发布时间:2014-07-16 16:14:25
目录 [hide]0. 为什么写这篇博客1. 如何统计进程CPU利用率1.0 概述1.1 /proc/stat 统计总CPU消耗1.2 进程消耗的CPU时间片1.3 "非阻塞"的计算进程CPU利用率1.4 ps命令显示的.........【阅读全文】
发布时间:2014-07-16 16:04:53
Here at the Microsoft Security Response Center, we investigate thousands of security reports every year. In some cases, we find that a report describes a bona fide security vulnerability resulting from an issue in one of our products; when this happens, we develop a corrective update as quickly as.........【阅读全文】
发布时间:2014-07-14 16:19:19
Linux进程间的通信可以简称为IPC(Interprocess Communication),前面说过的 Linux的同步工具也是属于IPC的一部分,这里我想说的是通常意义的进程间的实际数据通。1管道管道是最早的UNIX IPC,所有的UNIX系统都支持这个IPC通信机制。我们最常见到使用它的位置就是shell中使用的管道命令.........【阅读全文】
发布时间:2014-07-12 11:52:46
原文标题:Page Cache, the Affair Between Memory and Files原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。] 上次我们考察了内核如何为一个用户进程管理虚拟内存,但是没有涉及文件及I/O。这次我.........【阅读全文】
发布时间:2014-07-12 11:51:40
原文标题:How The Kernel Manages Your Memory原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。] 在仔细审视了进程的虚拟地址布局之后,让我们把目光转向内核以及其管理用户内.........【阅读全文】
发布时间:2014-07-12 10:21:17
【代码】申请一个共享内存区,attach到进程当中,然后通过fork创建子进程。理论上子进程和父进程是各自有在自己的内存空间,对变量的修改互不影响的,但是共享内存中的数据由子进程修改以后,父进程可以得知。#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>extern in.........【阅读全文】
发布时间:2014-07-11 15:53:41
简单归纳:fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用; 而流(如: fopen)返回的是一个FIL.........【阅读全文】
发布时间:2014-07-10 20:50:03
7.1.1 Linux管道的实现机制在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为:· 限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓.........【阅读全文】
发布时间:2014-07-10 15:54:42
文件锁、信号等进程通信方法无法实现在进程见传递大量数据,如果使用文件锁,进程见信息的传递将受到磁盘读取速度的限制。管道作为最早的进程间通信机制,实现了父子进程或者兄弟进程之间的数据读写。 Linux系统中的管道都是半双工的,所以要实现双工通信就需要创建2个管道来完成了;某些UNIX版本的管道是全.........【阅读全文】
发布时间:2014-07-10 15:32:41
在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:(1) char str[10]="";(2) char str[10]={'\0'};(3) char str[10]; str[0]='\0';第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'。如果数组.........【阅读全文】
发布时间:2014-07-10 12:18:17
信号是进程之间通信的另外一种方式。之前用过kill -l看了Linux系统支持的所有信号,这些信号在sys/signal.h中定义,系统支持64种信号。除了系统内核和root之外,只有具备相同uid、gid的进程才可以使用信号进行通信。gaolu@gaolu-desktop:~$1、信号的产生(1)kill函数函数调用形式为int kill(pid_t pid,i.........【阅读全文】
发布时间:2014-07-10 09:59:27
在Linux系统中,进程运行在自己的虚拟内存空间中,如何协调不同虚拟地址空间中的进程访问一个非共享资源,文件加锁是基本进程通信方法之一。 可以使用fcntl()、lockf()、flock()实现文件锁,进而实现进程之间的通信。 1.fcntl()【函数介绍】调用形式(执行失败返回-1):int fcntl.........【阅读全文】
发布时间:2014-07-09 17:54:06
【syslogd守护进程】由于守护进程没有控制终端进行信息的输出,而有些情况还需要根据进程提供的信息进行系统管理和维护工作。因此Linux提供了syslogd守护进程,专门用于接受其他守护进程提供的信息记录在指定位置来解决日志记录的问题。 1.syslogd守护进程负责记录、发送系统或者工具产生的信息,根.........【阅读全文】
tianyashuibin2014-12-08 11:22
Oscarzhao:c++11 中貌似可以
嗯,是的,在c++11中可以
下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
int a = 1;
^
tianyashuibin2014-10-23 21:57
除了静态数据成员外,数据成员不能在类体内显式的初始化
举个最简单例子
struct a
{
int a=1;
int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间
tianyashuibin2014-10-23 21:39
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。
tianyashuibin2014-10-23 21:32
记住静态成员这样初始化:
C/C++ code
class A
{
public:
static const int a[3];
};
const int A::a[3] = {1,2,3};