Chinaunix首页 | 论坛 | 博客
  • 博客访问: 912215
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-10-24 21:09:38

一、创建分离线程有两种方式创建分离线程:(1)在线程创建时将其属性设为分离状态(detached);(2)在线程创建后将其属性设为分离的(detached)。二、分离线程的作用由系统来回收线程所占用资源。三、实例#include <stdlib.h> #include <string.h> #include <unistd.h> #include <sema.........【阅读全文】

阅读(4011) | 评论(0) | 转发(0)

发布时间:2014-08-17 11:35:51

inux 多线程信号总结(一)  1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。  2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞.........【阅读全文】

阅读(1446) | 评论(0) | 转发(0)

发布时间:2014-08-16 14:25:38

当一个进程调用fork时,因为子进程在开始时复制父进程的存储映像,信号捕捉函数的地址在子进程中是有意义的,所以子进程继承父进程的信号处理方式。特殊的是exec,因为exec运行新的程序后会覆盖从父进程继承来的存储映像,那么信号捕捉函数在新程序中已无意义,所以exec会将原先设置为要捕捉的信号都更改为默认动作。1.........【阅读全文】

阅读(4864) | 评论(1) | 转发(0)

发布时间:2014-07-17 17:25:11

1、环形缓冲区(下面生产者消费者的例子使用)  使用一段内存空间作为缓冲区,维护两个指针,一是读指针,指向缓冲空间的第一个可读位置;二是写指针,指向空间的第一个空位置。读取一个数据后,读指针+1,当指针位置超出缓冲区域则指向缓冲区域的头位置(置0);写入一个数据后,写指针+1,当指针位置超出缓冲.........【阅读全文】

阅读(2734) | 评论(1) | 转发(0)

发布时间:2014-07-16 16:33:55

 什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。   下面是Linux系统下用C语言创建的.........【阅读全文】

阅读(1310) | 评论(0) | 转发(0)

发布时间:2014-07-09 17:54:06

【syslogd守护进程】由于守护进程没有控制终端进行信息的输出,而有些情况还需要根据进程提供的信息进行系统管理和维护工作。因此Linux提供了syslogd守护进程,专门用于接受其他守护进程提供的信息记录在指定位置来解决日志记录的问题。 1.syslogd守护进程负责记录、发送系统或者工具产生的信息,根.........【阅读全文】

阅读(3328) | 评论(1) | 转发(0)

发布时间:2014-07-09 16:52:25

【守护进程介绍】Linux系统启动时往往要启动很多的系统服务程序,比如apache,ftp,telnet等。这些系统服务程序往往运行在后台,没有控制终端,在系统引导装入时启动,在系统关闭时终止,周期性的执行某项任务或者等待处理某项任务。这样的进程叫守护进程或者精灵进程。 编写守护进程一般是在普通进程基.........【阅读全文】

阅读(1411) | 评论(0) | 转发(0)

发布时间:2014-07-08 12:26:42

【waitpid()介绍】waitpid主要用于根据进程ID号等待指定的子进程。函数形式如下:******************************************************pid_t waitpid(pid_t pid, int* status,int options);******************************************************关于options:---WNOHANG:如果没有子进程执.........【阅读全文】

阅读(1485) | 评论(2) | 转发(0)

发布时间:2014-07-08 12:25:12

(1)wait()wait函数用于父进程和子进程的同步,让父进程等待子进程结束。wait函数不需要带任何参数,适合于等待所有的子进程。相关信息如下:pid_t wait(int* status);如果函数执行成功,返回等待到结束的子进程的PID和结束状态status,否则返回-1.状态status有2种情况:一种是正常的退出,另一种是接受.........【阅读全文】

阅读(1292) | 评论(0) | 转发(0)

发布时间:2014-07-08 11:55:19

(1)fork和vfork之前用过fork来创建子进程,知道可以根据返回值来区分父子进程,对于父进程来说,fork的返回值是子进程ID,对于子进程来说返回PID为0.关于这一点,vfork函数与fork函数是相同的。而fork与vfork的区别在于在哪呢?*****************************************************************************.........【阅读全文】

阅读(1188) | 评论(0) | 转发(0)

发布时间:2014-07-08 11:35:32

exec函数族简介exec函数族,顾名思义,就是一簇函数,他把当前进程映像替换成新的程序文件,而且该程序通常main函数开始执行!说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:#include <unistd.h>extern char **environ;int ex.........【阅读全文】

阅读(1306) | 评论(0) | 转发(0)

发布时间:2014-07-07 23:14:40

建议大家保存下写过的复用性好的代码 以后可以用来建立自己的代码库 ^ ^......【阅读全文】

阅读(913) | 评论(0) | 转发(0)

发布时间:2014-07-06 21:08:37

最近工作过程中,发现好几台服务器出现僵死进程(如图)。   用下面的命令找出僵死进程  ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'  命令注解:  -A 参数列出所有进程  -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数.........【阅读全文】

阅读(846) | 评论(0) | 转发(0)

发布时间:2014-07-06 21:05:50

解释一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)进程的危害由于子进程的结束和父进程的运行是一个异步过程,即父进.........【阅读全文】

阅读(721) | 评论(0) | 转发(0)

发布时间:2014-07-06 16:49:50

进程控制块的基本内容概述进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它 来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制 和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一 一对应的)应用在不同的操作系统中对进程的控制和管理机制不同,PCB中的.........【阅读全文】

阅读(1010) | 评论(0) | 转发(0)

发布时间:2014-07-06 16:35:22

进程链代码中提到两种方式:都是要等到子进程终止后再终止父进程。如果父进程在子进程终止前终止,那么子进程就会被init进程接管,getppid()输出的就会使init进程的pid.......【阅读全文】

阅读(1167) | 评论(1) | 转发(0)

发布时间:2014-07-04 16:37:20

每一个进程都有自己的一个进程堆栈空间。在Linux界面执行一个执行码时,Shell进程会fork一个子进程,再调用exec系统调用在子进程中执行该执行码。exec系统调用执行新程序时会把命令行参数和环境变量表传递给main函数,它们在整个进程堆栈空间中的位置如下图12-7所示。     .........【阅读全文】

阅读(2500) | 评论(0) | 转发(0)

发布时间:2014-03-21 10:12:31

Linux 和对称多处理在 SMP 系统上发挥 Linux 的功能 如主流中央处理器(CPU)供应商所证明的那样,多核处理器随时准备着占领桌面和嵌入式市场。多处理带来了更高的性能,也同时带来了新的问题。本文将探讨多处理和开发使用 SMP 的 Linux? 应用程序背后的思想。0 评论: .........【阅读全文】

阅读(901) | 评论(0) | 转发(1)
给主人留下些什么吧!~~

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;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

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};

回复  |  举报
留言热议
请登录后留言。

登录 注册