自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Everlasting2016的博客

我流我的汗水 华丽如天花乱坠

  • 博客(50)
  • 收藏
  • 关注

原创 shell脚本中的$*,$@和$#

脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" "2" "3"(分别被包住)$#为3(参数数量)

2016-07-30 23:43:29 420

原创 黑盒测试和白盒测试

软件测试的两个方面而已。白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。黑盒测试:是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测

2016-07-30 22:14:00 628

原创 堆栈分析

代码:#include#includevoid bug(){ system("reboot"); exit(0);} int stack_test(int a,int b){ printf("before write: 0x%x\n",b); int* p=&a; p++; *p=0x

2016-07-29 09:00:31 533

原创 TCP

代码:server.c://服务器端 #include #include#include#include#include#include#includeint start(const char* _ip,const int _port){ int listen_so

2016-07-29 00:04:46 288

原创 UDP

代码:server.c://server端#include #include#include#include#include#include#include#includevoid Usage(const char* proc){

2016-07-28 23:27:29 516

原创 Linux学习之基本概念

1.Linux系统特性:开放性,多用户,多任务,良好的用户界面(Linux的传统界面是基于文本的命令行界面,即shell,有很强的程序设计能力,用户可方便的用它编制程序,从而为用户扩充系统功能提供更高级的手段。Linux特点:开源  免费 稳定,具有设备独立性,丰富的网络功能,可靠地网络安全,良好的可移植性。2.Linux分为内核和shell,内核是操作系统的核心,功能:虚拟内存,

2016-07-28 19:39:31 451

原创 共享内存(shm)

代码:comm.h:#ifndef _COMM_#define _COMM_#include #include #include #include #include #define _PATH_ "."#define _PROJ_ID_ 0x6602int create_shm(int _size);int get_shm(int _size);int desto

2016-07-28 19:37:02 589

原创 信号量(sem)

代码:comm.h:#ifndef _MYSEM_#define _MYSEM_#include #include #include #include #define _PATH_ "."#define _PROJ_ID_ 0x0603typedef union semun { int val; /* Value for SETVAL */struct

2016-07-28 18:12:21 659

原创 消息队列(msg)

代码:comm.h:(是一层对于函数接口的封装)#ifndef _DEBUG_#define _DEBUG_#include #include #include #include #include #define _PATH_ "." //当前路径下#define _PROJ_ID_ 0x6654#define _SIZE_ 3000#define S

2016-07-28 17:45:06 803

原创 命名管道(FIFO)

代码:client.c#include #include #include #include #include #define __PATH__ "/home/chen/7Month/7_28/FIFO/my_fifo"//这个就是管道的名字,和建立的路径int main(){ int fd = open(__PATH__,O_WRONLY,0);//以只写的

2016-07-28 16:33:09 476

原创 管道(PIPE)

代码:#include #include #include #include #include int main(){ int _pipe[2]; int ret = pipe(_pipe); if(ret == -1){ printf("create pipe error! errno code is : %d\n",errno); retur

2016-07-28 11:32:57 352

原创 wait和waitpid函数

一、wait函数代码:#include #include #include #include int main(){ pid_t id = fork(); if(id == 0){ printf("child:pid:%d,ppid:%d\n",getpid(),getppid()); sleep(10); exit(3); }else{ printf("This

2016-07-28 00:46:05 398

原创 打印环境变量和参数列表的方法

一、打印参数列表代码一:#includeint main(int argc,char* argv[],char*env[]){ int i=0; while(argv[i] != NULL) { printf("%s \n",argv[i]); i++; } return 0;}代码二:#includeint main(int

2016-07-28 00:12:15 1393

原创 exec函数的使用

代码:#include #include #include int main(int argc,char* argv[]){ pid_t id = fork(); if(id == 0){ execl("/bin/ls","ls","-al","../xiao_exec",NULL);//如果execl函数执行成功,就不会执行printf语句,没有返回 //execlp(

2016-07-27 23:55:01 710

原创 Linux学习之进度条设计progressBar

进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。 #include #include void progressBar() { char

2016-07-27 19:43:13 926

转载 c函数调用过程原理及函数栈帧分析

今天突然想分析一下函数在相互调用过程中栈帧的变化,还是想尽量以比较清晰的思路把这一过程描述出来,关于c函数调用原理的理解是很重要的。1.关于栈        首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->地地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的CPU而言,其中---> 寄存器ebp(ba

2016-07-27 11:44:56 495 1

转载 栈帧与函数调用过程的分析

函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数调用的过程进行分析。一、堆和栈首先要清楚的是程序对内存的使用分为以下几个区:l         栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。l         堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由

2016-07-27 11:40:45 550

原创 调整进程的优先级的方法

linux下调整进程优先级 进程的优先级决定了进程是否优先被cpu分配资源进行处理。在cpu资源十分充足时,每个正在运行的进程都能分配到足够的资源进行处理,此时调整进程的优先级是没有什么意义的;如果cpu资源紧张时,top查看cpu使用达到90%以上时,优先级高的进程将被优先分配资源去执行。 如果此时手头有一个非常紧要的任务要执行,比如传输一个非常重

2016-07-27 11:32:03 3161

原创 linux下程序的优先级

linux下的进程调度优先级是从-20到19,一共40个级别,数字越大,表示进程的优先级越低。默认时候,进程的优先级是0。查看进程优先级有两个办法:ps和top。top命令显示的NI列的值。或者可以使用ps -efl来查看,也是在ni列表示了进程的优先级。进程的优先级可以在程序运行的时候设置,也可以在程序运行过程中动态的修改。运 行的时候设置进程的优先级可以使用nice命令,比如要使得to

2016-07-27 11:30:59 1225

原创 write和fwrite函数(文件描述符)

代码:#include #include char * msg = "hello\n";int main(){ printf("world \n"); write(1,msg,strlen(msg)); fwrite(msg,1,strlen(msg),stdout); sleep(3);}运行结果:分析:一个使用的是文件描述符,一个使用的是文件指针

2016-07-27 11:15:57 2015

原创 vfrok()的使用

代码:#include #include #includeint g_val=0;int main(){ int val = 0; // pid_t id = fork(); pid_t id = vfork(); //vfork创建的子进程是在父进程的空间上进行操作,如果不exit则会破坏父进程的 //栈空间,出现段错误或者死循环 if(id < 0)

2016-07-27 10:48:08 654

转载 vfork()在使用过程中不能使用return 0

在学习linux进程编程的时候遇到一个问题,就是使用vfork()函数以后本以为下面会打印出1和2,但是结果却出人意料#include #include int main(void){ pid_t pid; int count = 0; pid=vfork(); count++; printf("count=%d\n",count);

2016-07-27 10:40:25 1337

转载 fork函数与vfork函数

一、fork1. 调用方法#include #include pid_t fork(void);正确返回:在父进程中返回子进程的进程号,在子进程中返回0错误返回:-1     子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork

2016-07-27 10:22:42 380

原创 打开文件和写文件的操作

使用系统调用的:open好write代码://打开文件和写问件#include #include #include #include #include #include #include #include const char* msg = "hello world \n";int main(){ close(1); //close(2); int f

2016-07-27 10:04:12 493

原创 fork()多次之后父子进程的数目变化

代码: #include int main(){ int i=0; int j=0; for(i=0; i< 3; i++) { int id = fork(); if(id == 0) { printf("i am child:%d\n",j); } else { j+

2016-07-27 09:31:16 1147

原创 fork()后父子进程的地址空间

#includeint main(){ int common =123; int pid = fork(); if(pid == 0) { printf("this is child,pid=%d ppid=%d\n",getpid(),getppid()); printf("add:%p val:%d\n",&common,common); } else if

2016-07-27 09:10:08 802

原创 关于重定向和缓存区

//标准I/O是缓冲的,如果标准输出到终端设备,则它是⾏行缓冲,否则它是全//缓冲#include #include #include #include const char * msg ="hehe,ni shi ge hao ren \n";int g_val = 0;int main(){ int val = 0; printf("before for

2016-07-27 09:04:33 1505

转载 从一个fork()实例理解全缓冲与行缓冲

之前一直对无缓冲、行缓冲、全缓冲不太感冒,然后最近在《UNIX环境高级编程》上看到这样一个例子,感觉挺好的拿来给没看过的小伙伴们看看:、#include #include int globvar = 6;char buf[] = "a write to stdout\n";int main(){ int var; pid_t pid; var

2016-07-27 08:09:35 712

原创 STL中map的operator[ ]使用方法

在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。       下面代码的输出结果会什么呢?map mapInfo;if ("k

2016-07-26 08:27:15 1778

原创 string转换为int的方法

方法1:使用可以现将int转换为char*,char*使用atoi转换为int类型int StringToInt1(string str){ assert(str.size()); char ch[11] = { 0 }; int index = 0; while (index < str.size()) { ch[index] = str[index]; index++;

2016-07-25 23:25:54 1488

原创 int类型转换为string类型的两种方法

方法:先借助sprintf函数将int转换为char类型的数组,然后char*可以转换为string代码如下:#include #include using namespace std;int main(){ int n = 65535; char t[256]; string s; sprintf(t, "%d", n); s = t; cout <

2016-07-25 22:40:23 1696

原创 进程和和轻量级进程

在多线程程序中,一个新的线程通常由一个进程调用phtread_create()函数而诞生的。新线程创建后,通常将这个进程称为主线程。你也许会有所迷惑:一个进程怎么会编程线程?此刻有几个线程,几个进程?其实通过上文对线程、轻量级进程以及线程组之间关系的理解后,这个问题似乎也不难回答。我们可以将所有的进程都看作一个线程组,只不过普通进程的线程组只包含它自己一个线程,它不能与其他线程共享资源,只

2016-07-20 23:56:16 879

原创 浅谈fork与vfork函数

1) 先说说forkfork在linux中用于进程的创建。它实际上是复制了一个与父进程(就是调用fork的进程)一模一样的子进程。其主要复制的内容包括: 进程控制块PCD、数据段与堆栈。代码段是共享的。因为代码段是read-only的,不用担心改写的问题,大家共用一块代码也没什么问题。调用完fork后,两个进程就分道扬镳了,各干各的互不干扰。可问题是他们两个什么都是一样的,那如何区分谁是谁

2016-07-20 19:32:51 402

原创 System V和Posix消息队列的差别

一、posix消息队列与system v消息队列的差别:1、对posix消息队列的读总是返回最高优先级的最早消息,对system v消息队列的读则可以返回任意指定优先级的消息。2、当往一个空队列放置一个消息时,posix消息队列允许产生一个信号或启动一个线程,system v消息队列则不提供类似机制。二、队列中的每个消息具有如下属性:1、一个无符号整数优先级(posix)或一个

2016-07-17 22:04:01 2909

原创 linux下管道的容量以及实现机制

(一)管道外部实现当我们定义一个管道时,这个管道是由内核管理的一个缓冲区,可以抽象为现实生活中的一个传输线路。管道的一端连接一个进程的输出,这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结

2016-07-17 18:15:12 763

原创 管道使用的四种特殊方式

进程之间通信最简单的方式:管道通信使用管道需要注意以下4种特殊情况(假设都是阻塞I/O操作,没有设置O_NONBLOCK标志):如果所有指向管道写端的文件描述符都关闭了(管道写端的引用计数等于0),而仍然有进程从管道的读端读数据,那么管道中剩余的数据都被读取后,再次read会返回0,就像读到文件末尾一样。如果有指向管道写端的文件描述符没关闭(管道写端的引用计

2016-07-17 18:00:19 785

原创 进程间通信各自的特点

进程通信的含义进程是转入内存并准备执行的程序,每个程序都有私有的虚拟地址空间,由代码,数据以及它可利用的系统资源(如文件,管道)组成.多进程/多线程是windows操作系统的一个基本特征.Linux系统一般都统称为进程.由于不同的进程运行在各自不同的内存空间中,其中一个进程对于变量的修改另一方是无法感知的,因此,进程之间的消息传递不能通过变量或其他数据结构直接进行,只能通过进程间通

2016-07-17 17:14:16 956

原创 Linux的进程/线程间通信方式

Linux系统中的进程间通信方式主要以下几种:同一主机上的进程通信方式   * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)   * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式 

2016-07-17 15:54:49 518

原创 ftok函数

一、函数原型 系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )二、参数解释fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。当成功执行的时候,一个key

2016-07-15 23:43:19 704

原创 《c++编程思想》读书笔记

以下为博主呕心沥血的总结,看的时候要珍惜一点,答应我!1.函数参数进栈顺序:从右到左2.字符串化预处理特征:在表达式前加上‘#’表示将仍和一个表达式转化成一个字符串。3.解析一个变量的类型:从中间向外扩展,先右再左,大多数的声明以左-右左完成(具体结合运算符的优先级来判断)     eg:      1. void*( * ( *pfun )( in

2016-07-13 20:27:28 454

空空如也

空空如也

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

TA关注的人

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