Linux后台服务器编程。
发布时间:2014-07-14 16:19:19
Linux进程间的通信可以简称为IPC(Interprocess Communication),前面说过的 Linux的同步工具也是属于IPC的一部分,这里我想说的是通常意义的进程间的实际数据通。1管道管道是最早的UNIX IPC,所有的UNIX系统都支持这个IPC通信机制。我们最常见到使用它的位置就是shell中使用的管道命令.........【阅读全文】
发布时间: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-10 15:54:42
文件锁、信号等进程通信方法无法实现在进程见传递大量数据,如果使用文件锁,进程见信息的传递将受到磁盘读取速度的限制。管道作为最早的进程间通信机制,实现了父子进程或者兄弟进程之间的数据读写。 Linux系统中的管道都是半双工的,所以要实现双工通信就需要创建2个管道来完成了;某些UNIX版本的管道是全.........【阅读全文】
发布时间: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 11:58:47
SIGHUP信号与控制终端UNIX中进程组织结构为 session (会话)包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。这儿是可.........【阅读全文】
发布时间:2014-07-05 17:39:43
使用信号和管道传递消息存在一定的限制:信号传递的消息有限,管道虽然可以传输一定量的信息,但是只能传递无格式的字节流。3种新的进程间通信(IPC)机制---消息队列、信号量、共享内存,可以解决这些问题。这些机制最早出现在UNIX中,被编入POSIC:XSI中,Linux支持POSIX标准。 (1)关于IPC资源消息队.........【阅读全文】
发布时间:2014-05-23 15:40:46
本文将从以下几个方面来阐述信号:(1)信号的基本知识(2)信号生命周期与处理过程分析(3) 基本的信号处理函数(4) 保护临界区不被中断(5) 信号的继承与执行(6)实时信号中锁的研究 第一部分: 信号的基本知识 1.信号本质: 信号的本质是软件层次上对中断的一种.........【阅读全文】
发布时间:2014-05-11 23:05:35
Why semaphores?Posix semaphores are easy to usesem_initsem_waitsem_postsem_getvaluesem_destroyExercises 1 2 3Now it is time to take a look at some cod.........【阅读全文】
发布时间:2014-03-21 15:40:31
Google Protocol Buffer 的使用和原理Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的.........【阅读全文】
发布时间:2014-03-21 12:35:00
pthreads 的基本用法介绍 POSIX 线程线程问题是令许多程序员头痛的问题。UNIX 的进程模型简单易懂,但有时效率低下。线程技术通常能使性能得到实质性的改进,付出的代价就是代码有点混乱。本文揭开了 POSIX 线程接口的神秘面纱,并提供了线程化代码的实际例子作为参考。.........【阅读全文】
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};