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

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-07-07 22:48:33

一晃毕业已经整整一年了,记得我还在学校的时候,曾经想过如果到了工作那一天,我一定会每天都很努力。因为在学校的最后2年我过的太堕落了,那种落后的感觉和被人鄙视的滋味让人很害怕。 可是现在呢,不到一年的时间,我觉得我又变了,不知道是成熟了还是学坏了。怎么说的,现在的公司就是很重视加班的,我.........【阅读全文】

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

发布时间:2014-07-07 22:38:07

之前有介绍过关于文件的指针和描述符,这次通过一个练习,熟悉了一下文件的open,close,read,write,sleek,dup等操作,一些主要的注意事项详见代码注释吧。 ps:部分代码写的有些龌龊,也和硬要把几个函数都试到有关,应该可以用更好的方法。fighting~~~ 【功能】命令行输入三个参数,将data.dat.........【阅读全文】

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

发布时间:2014-07-07 20:42:40

【代码】file.c#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>int main(int argc,char* argv[]){ struct stat file_stat; int fd; if(2 != argc)            &nbs.........【阅读全文】

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

发布时间:2014-07-07 17:49:51

从 socket 到设备驱动程序Linux? 操作系统的最大特性之一就是它的网络栈。它最初源于 BSD 的网络栈,具有一套非常干净的接口,组织得非常好。其接口范围从协议无关层(例如通用 socket 层接口或设备层)到各种网络协议的具体层。本文将从分层角度对 Linux 网络栈的接口进行探索,并介绍其中的一些主要结构。协议简.........【阅读全文】

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

发布时间:2014-07-07 17:15:06

 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而.........【阅读全文】

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

发布时间:2014-07-07 16:57:35

Linux? 系统调用 —— 我们每天都在使用它们。不过您清楚系统调用是如何在用户空间和内核之间执行的吗?本文将探究 Linux 系统调用接口(SCI)系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间与内核之间的界限。.........【阅读全文】

阅读(861) | 评论(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(命令)这四个参数.........【阅读全文】

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

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

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

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

发布时间:2014-07-06 18:26:49

linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程.........【阅读全文】

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

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

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

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

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

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

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

发布时间:2014-07-05 22:52:28

【命令功能】linux系统中ls -l命令可以获得某个目录下文件的具体信息,比如:gaolu@gaolu-desktop:~/test_folder$ ls -ltotal 20-rw-r--r-- 1 gaolu gaolu 2578 2009-03-08 02:10 gao.lu.c-rw-r--r-- 1 gaolu gaolu 2577 2009-03-08 02:07 gao.lu.c~-rwxr-xr-x 1 gaolu gaolu 9675 2009-03-08 02:12 .........【阅读全文】

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

发布时间:2014-07-05 20:30:45

近来连续看到这样两个信息,一个是知乎上有个问题叫:“如何学习C语言?”,这个问题的答案中得票数第二高的是不要最先学习C语言;一个是看到了2012年金旭亮老师写的第一门编程语言选谁?这文章,金老师也是支持不用C做第一门语言的,从投票来看大部分人也比较支持这个观点。这是比较让我意外的事情,因为我正好持相.........【阅读全文】

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

发布时间:2014-07-05 17:39:43

使用信号和管道传递消息存在一定的限制:信号传递的消息有限,管道虽然可以传输一定量的信息,但是只能传递无格式的字节流。3种新的进程间通信(IPC)机制---消息队列、信号量、共享内存,可以解决这些问题。这些机制最早出现在UNIX中,被编入POSIC:XSI中,Linux支持POSIX标准。 (1)关于IPC资源消息队.........【阅读全文】

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

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

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

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

发布时间:2014-07-04 10:49:33

一、inode是什么理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是.........【阅读全文】

阅读(1688) | 评论(1) | 转发(2)

发布时间:2014-07-03 22:45:51

linux系统中每个进程都有2个ID,分别为用户ID和有效用户ID,UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程对于文件和资源的访问权限(具备等同于哪个用户的权限)。可以通过函数getuid()和geteuid()或者进程的两个ID值。 当一个用户登陆系统时,系统会将UID和EUID都赋值为/etc/passwd文件.........【阅读全文】

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

发布时间:2014-07-03 22:23:55

在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。 文件描述符相当于一个逻辑句柄,而open,close等函数则.........【阅读全文】

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

发布时间:2014-07-03 21:55:07

在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件.........【阅读全文】

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

发布时间:2014-07-03 16:34:00

一、fcntl函数int fcntl(int fildes, int cmd, .../*int arg*/);1.fcntl函数可以改变已经打开的文件性质。 2.主要功能:a.复制一个现有的描述符F_DUPFD:新文件描述符作为函数值返回,大于或者等于第三个参数。新描述符与filedes共享一个文件表项。但是新描述符有自己的文件描述符标志。其.........【阅读全文】

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

发布时间:2014-07-03 11:10:05

通过 read write系统调用来反应socket编程中的出错情况;
每个socket都有两个缓冲区send buffer, receive buffer;
发送到网络的数据暂存在send buffer中,只有收到对方的ack后, kernel才从buffer中清除这部分数据;接收端将收到的数据暂存在receive buffer 中,自动进行确认。
服务器编程中常用的做法: 线程池 + Nonblock I/O + Multiplexing(select/poll, 以及linux上特有的epoll);
通过fcntl(fd, F_SETFL, flags | O_NONBLOCK); 来设置文件描述符为 noblock;
read在receive buffer有数据时立刻返回,当receive buffer为空时,blocking模式会等待,而nonblock模式下会立即返回-1(errno = EAGAIN 或 EWOULDBLOCK);
blocking的write只有在缓冲区足以放下整个buffer时才返回,nonblock write......【阅读全文】

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

发布时间:2014-07-02 17:59:03

一、下列四个条件中的任何一个满足时,socket准备好读: 1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).我们可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1.........【阅读全文】

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

发布时间:2014-07-02 16:43:25

Linux后台开发应该具备技能一、linux和os:1、命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验2、cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握3、awk sed.........【阅读全文】

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

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

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

登录 注册