自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 UNIX网络编程中RST分节总结

RST的含义为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。有三个条件可以产生RST:        1), SYN到达某端口但此端口上没有正在监听的服务器。        2), TCP想取消一个已有连接        3), TCP接收了一个根本不存在的连接上的分节。   1.  Connect 函数返回错误ECONNREFUSED: 如果对客户的SYN的响应是RST

2015-05-11 10:03:19 238

原创 linux文件链接

链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 我们首先来了解一下几个名词: 索引节点(inode) 要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(

2015-04-15 11:29:43 214

转载 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程

首先总结下进程、进程组与会话之间的关系。进程属于一个进程组,进程组属于一个会话,会话可能有或没有控制终端。以下是一些基本概念:        僵死进程:一个子进程已经终止,但是其父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源),则该子进程就成为僵死进程。消灭僵尸进程的唯一方法是终止其父进程。         孤儿进程:子进程的父进程已经终止,但是该进程依然存在,则称该子

2015-04-08 19:07:58 251

转载 Linux系统编程--read/write

read/write  read函数从打开的设备或文件中读取数据。 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读

2015-04-02 13:04:22 297

转载 Linux环境进程间通信(二): 信号(上)

一、信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强

2015-03-25 15:04:22 260

转载 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)

先,先稍微了解系统调用的概念:     系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Program

2015-03-18 19:59:44 219

原创 字符串匹配的KMP算法

字符串匹配是计算机的基本任务之一。   举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?   许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。   这种算法不太容易理解,网上有很多解

2015-01-29 15:38:48 194

原创 字符串匹配的KMP算法

字符串匹配是计算机的基本任务之一。   举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?   许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。   这种算法不太容易理解,网上有很多解

2015-01-29 15:37:45 59

原创 C语言编程创建函数fork() 执行解析

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下: 1.函数本身 (1)头文件 #include #include (2)函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

2015-01-20 11:11:06 392

转载 Linux多线程编程(不限Linux)

前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题: 是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能: 1)有一int型全局变量g_Flag初始值为0; 2) 在主线称中起动线程1,打印“this is thread1”,并将g

2015-01-06 23:02:26 210

转载 C中的继承和多态

1、引言 继承和多态是面向对象语言最强大的功能。有了继承和多态,我们可以完成代码重用。在C中有许多技巧可以实现多态。本文的目的就是演示一种简单和容易的技术,在C中应用继承和多态。通过创建一个VTable(virtual table)和在基类和派生类对象之间提供正确的访问,我们能在C中实现继承和多态。VTable能通过维护一张函数表指针表来实现。为了提供基类和派生类对象之间的访问,我们可以在基

2015-01-06 20:51:55 294

转载 ofstream和ifstream详细用法

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 2、析取器(>>)  从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输

2014-12-27 17:02:19 242

转载 Ubuntu 配置tftp服务

tftpd-hpa 是一个功能增强的TFTP服务器。它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统 1、sudo apt-get install tftp-hpa tftpd-hpa xinetd 2、建立配置文件 sudo vi /etc/xinetd.d/tftp 新建文件tftp tftp内容: service tftp { d

2014-12-25 13:08:46 177

原创 C语言中的指针和内存泄漏

引言 对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人员大多数调试时间的事项。指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是一旦您了解了指针及其关联内存操作的基础,它们就是您在 C 语言中拥有的最强大工具。 本文将与您分享开发人员在开始使用指针来编程前应该知道的秘密。本文内容包括

2014-12-24 23:10:16 326

转载 C++11 新特性之 nullptr

对于有一定编程基础的人对于NULL这个毫不陌生,但是NULL并不是一个关键字而是一个宏,他在C语言中这样定义: [cpp] view plaincopy #define NULL (void*)0    被定义为了一个(void*)0的宏,所以NULL是一个不指向任何对象的指针,也可以用0表示。这样定义在C语言中使用是毫无问题的。但是,C+

2014-12-17 10:01:06 338

转载 C++11 auto

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时根本做不到。 c++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属类型。 例如: int a=3,b=2; auto s=a+b; 因为两个变量类型是int ,所以 s的类型也就是int。 [cpp]

2014-12-17 09:52:17 299

转载 二维数组动态分配和释放

(1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指针 printf("%d\n", sizeof(a[0]));//N,一维数组 free(a); (2)已知第一维 Code-2 char* a[M

2014-12-09 17:11:06 220

转载 getchar,putchar等函数详解

fgetc (由文件中读取一个字符) 头文件: include 函数声明: int fgetc(FILE * stream); 说明: fgetc()从参数stream所指的文件中读取一个字符.若读到文件尾而无数据时便返回EOF. 字符读取函数fgetc()可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出 返回值 : getc(

2014-12-07 20:17:29 440

转载 重定向和管道

UNIX命令有三个有效的数据流:标准输入,标准输出,标准错误。 管道是从一个程序进程向另一个程序进程单向传送信息的技术。与其它形式的进程间通讯,如IPC、MESSAGE PASSING、SOCKET等不同,管道特点是单向的。通常,管道把一个进程的输出传给另一进程作为输入。在接受进程接收信息前,系统临时保留管道信息。 UNIX shell中,管道在命令行中由一个竖杠(|)表示。管道左边的

2014-12-07 20:00:32 235

原创 结构体和联合体

共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 --------------------------------------------------------------- 结构体变量所占内存长度是各成员占的内存长度的总和。 共同体变量所占内存长度是各最

2014-12-04 13:39:47 256

转载 动态存储变量与静态存储变量

在C语言中,每一个变量都有3个属性:一是“数据类型”,如int、float、char等,它确定了变量存储长度和运算方式;二是“作用域”,如上节所述,由变量所处的位置确定变量是局部变量还是全局变量,从而确定变量的作用域;三是“存储类别”,即变量在内存中的存储方式,不同的存储方式决定了变量存在的时间,即生存期。         静态存储的变量是指变量在程序执行的全过程中始终占据着大小固定的存储单元

2014-12-03 14:07:54 1027

原创 未初始化和非法的指针

下面这个代码段说明了一个极为常见的错误: int *a; ... *a = 12; 这个声明创建了一个名叫a的指针变量,后面那条赋值语句把12存储在a所指向的内存位置。   警告:        但是究竟a指向哪里呢?我们声明了这个变量,但从未对它进行初始化,所以我们没有办法预测12这个值将存储于什么地方。从这一点看,指针变量和其他变量并无区别。如果变量是静态的,它会被初始化为0;但

2014-12-02 12:19:39 509

原创 字符串常量

字符常量是由一对单引号括起来的单个字符。不能将字符串常量与字符常量混淆。字符常量可以赋值给字符变量,如"char b='a';",但不能把一个字符串常量赋给一个字符变量,同时也不能对字符串常量赋值! (1)含义 字符串常量是一对双引号括起来的字符序列。例如下面的是合法的字符串常量:"how do you do.","CHINA","a","$123.45" 存储:字符串中的字符依次存

2014-12-02 12:10:05 540

原创 Segmentation Fault in Linux(段错误)

何为段错误:当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)。这个描述是准确的。 SIGSEGV是在访问内存时发生的错误,它属于内存管理的范畴 SIGSEGV是一个用户态的概念,是操作系统在用户态程序错误访问内存时所做出的处理 当用户态程序访问(访问表示读、写或执行)不允许访问的内存时,产生SIGS

2014-11-30 18:47:43 397

转载 read/write函数与(非)阻塞I/O的概念

read/write 函数 read函数从打开的设备或文件中读取数据。 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 参数count是请求读取的字节数,读上来的数据

2014-11-30 13:39:36 306

转载 Linux Socket编程

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型

2014-11-30 12:57:24 312

转载 编译器的工作过程

源码要运行,必须先转成二进制的机器码。这是编译器的任务。 比如,下面这段源码(假定文件名叫做test.c)。 #include int main(void){ fputs("Hello, world!\n", stdout); return 0;} 要先用编译器处理一下,才能运行。 $ gcc test.c $ ./a.out Hello, world!

2014-11-30 09:46:50 251

原创 fread和read的区别

1.f是ANSI的C标准库,而后者的是UNIX下的系统调用。fread带有缓冲,是read的衍生,或者说fread是通过read实现的。要想直接和硬件打交道,必须用read。 2.fopen/fread是C标准的库函数,操作的对象是:file stream。open/read是和操作系统有关的系统调用,操作的对象是: “file descriptor” 3.fread返回的是一

2014-11-30 09:30:43 895

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除