自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 占楼

占楼

2017-09-24 23:01:56 307

原创 占楼

占楼

2017-09-24 23:01:44 302

原创 占楼

占楼

2017-09-14 23:33:45 334

原创 条件变量

一、条件变量初始化POSIX条件变量由一个pthread_cond_t型的变量表示。使用条件变量前需要对它进行初始化,所用的接口函数原型如下:int pthread_cond_init(pthread_cond_t *cond,const pthread_condattr_t *attr);    cond参数指向要初始化的条件变量,attr参数指向描述条件变量属性的结构体。attr可

2017-08-19 23:54:42 414

原创 生产者与消费者模型(互斥锁)

如果将缓冲区设计为一个先进先出的队列,可以同时容纳多条消息,那么只要缓冲区不满,生产者就可以提交消息;同时,只要缓冲区不空,消费者就可以取出消息进行处理。这将大大提高整个程序的效率。可以利用信号量计数的特性,用信号量的值表示缓冲区中消息的个数及空闲空间的个数。但这时由于生产者和消费者可能同时访问缓冲区,故需要再用一个互斥量来进行保护。#include #include #include

2017-08-18 00:07:09 1411

原创 线程同步机制之互斥量

一、互斥量的概念互斥量(mutex)从概念上来说类似于一个二进制信号量,即初始值为1的信号量。互斥量被获取之后就不能再被获取,因此对互斥体的获取和释放操作常常称为加锁和解锁操作。  互斥量只能由获取它的线程进行释放,如果违反这一原则,则结果是未定义的。  互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他

2017-08-17 16:39:55 361

原创 线程同步机制之信号量

一、什么是信号量线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号量来完成这个工作

2017-08-17 15:50:32 1004

原创 线程基础

一、为什么要用线程1、和进程相比,它是一种非常"节俭"的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。 2、运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30

2017-08-16 23:05:41 261

原创 守护进程

守护进程  守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。利用孤儿进程的特点我们可以让一个程序跑在后台。创建守护进程有如下步骤:  (1)创建子进程,终止父进程  由于守护进程是脱离控制终端的,因此首先创建子进程,终止父进程,使得程序在sh

2017-08-14 22:27:38 302

原创 信号与信号量

信号量是进程同步的机制。  信号是进程通信的方式。一、什么是信号量    为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行进程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来调协进

2017-08-14 00:23:00 789

原创 进程间通信之管道、共享内存、消息队列

一、管道通信,共享内存,消息队列,信号通信是进程间通信方式。信号量是进程间同步的机制。进程间通信的原因:数据传输,资源共享,通知事件,进程控制。二、管道通信(1)管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道尾部写入数据,另一个进程(读进程)从管道的头部读出数据。两个程序之间传递数据的一种简单方法是使用popen和pclose。#

2017-08-13 22:40:59 410

转载 进程终止及等待相关

一、基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成

2017-08-13 22:40:36 302

原创 进程的相关函数使用

上篇我们说到什么是进程,获取进程的id,那么怎么创建一个进程呢,我们可以使用fork函数。一、fork又叫分叉函数。它将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。二、函数有以下特点:①当fork()顺利完成任务时,就会存在两个进程,每个进程都从fork()返

2017-08-11 20:37:35 475

原创 进程的一些基本知识

进程的定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。我们需要与之区分的是线程。cpu执行一段程序,打开运行保存,这个过程便是进程。而线程,便是

2017-08-09 19:25:22 300

原创 占楼

占楼

2017-08-07 20:13:44 247

原创 DC--18 :头结点链表

头结点链表是在头指针的基础上将头从指针改成节点,这样,不用改变头指针,从而可以轻松的操作链表。头文件:#ifndef __LINKLIST_H__#define __LINKLIST_H__#define FALSE 0#define TRUE 1typedef int LinkData;typedef struct _node{ LinkData data; s

2017-08-07 09:05:49 239

原创 排序--3

快速排序int partition (int *a, int left, int right){ int pivot = a[right]; int index = left; int i; for (i = left; i < right; i++) { if (a[i] < pivot) { swap (a, i, index); index++;

2017-08-06 23:13:12 297

原创 排序--2

希尔排序:int main (){ int a[10]= {9,8,7,6,5,4,3,2,1,55}; int len =sizeof (a) / sizeof(a[0]); int get; int d = len; int i, j; do{ d = d / 3 + 1; for (i = d; i < len; i++) { get = a[

2017-08-06 20:12:01 227

原创 排序--1

void swap (int a[], int i, int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}void printA(int a[], int len){ int i; for (i = 0; i < len; i++) printf ("%-4d",a[i]); printf ("\n");

2017-08-03 22:48:03 234

原创 DC- 20 :二叉树

#ifndef __BTREE_H__#define __BTREE_H__#define BLEFT 0#define BRIGHT 1typedef char BTreeData;typedef struct _btreeNode //节点的类型{ BTreeData data; struct _btreeNode *lchild; struct

2017-08-01 00:14:22 219

原创 DC -19 :树树树02(接DC - 17)

// 递归打印结点void r_display(TreeNode* node, int gap, TreePrint pFunc){ if (node == NULL) return; // 打印距离前一个结点的距离 int i; for (i = 0; i < gap; i++) { printf ("%c", '-'); } // 打印结点自己 // pri

2017-07-30 23:21:48 250

原创 DC- 17 :树树树01

树真的乱。。。。先把树的创建与插入放上来:头文件:#ifndef __TREE_H__#define __TREE_H__#include "error.h"struct _treeNode;// 孩子结点链表的类型typedef struct _childNode{ struct _treeNode * childNode; struct _childNode

2017-07-30 00:58:32 232

原创 DC -16 :链式栈

zzzzzzzzzzzzzzzz程序猿的夜生活真的稳。。。。。今天改了签名:以梦为码,越敲越傻。。。愿大家的bug都可以得到完美解决。。只是这需要一点点的积累,一点点的进步。下面是链式栈的代码(错误文件昨天已传,不再传):头文件:#ifndef __LINKSTACK_H__#define __LINKSTACK_H__#define SIZE 100#define FALSE 0

2017-07-28 01:26:27 281

原创 DC - 15 :顺序队列

编写可移植灵活性好的目标可以使我们的工作很轻松。。比如,出现满屏幕的bug的时候。。我们会比电脑先崩溃,所以,今天我们学了编写一个文件利用返回进行判断错误的种类,这样,可以有针对性的解决bug。。以后很方便的使用,这只是一个工作的积累,文件还需要很多添加和修改。error的头文件:#ifndef __ERROR_H__#define __ERROR_H__#include #defin

2017-07-27 00:12:02 228

原创 DC - 14:头指针链表

今天开始敲一个通讯录。。。看到要求之后脑子里只\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\n\n\n\n\n\n好在纠结了很长时间终于还是知道从哪儿开始了。虽然感觉这几天的学习效率还可以,但遇到题目还是\a\a\a\a。。。代码练习应该还是太少,各个部分的用法也应该还是掌握不到位。下面是头指针链表://头指针#include #include #def

2017-07-26 00:00:07 226

原创 DC - 13 :顺序表

以下为seqlist.h头文件#ifndef __SEQLIST_H__#define __SEQLIST_H__#define FALSE -1#define TRUE 0#define INIT_SIZE 100#define RISE 20typedef int seqdata;typedef struct _seqlist{ seqdata *lis

2017-07-24 20:42:54 395

原创 DC - 12 :位运算的巧用

#include int fun(char ch){ int tmp; int i; int count = 0; for (i = 0; i < 8; i++) { tmp = ((ch >> i) & 1); if ( 1 == tmp ) count ++; } printf ("%d", count);}int

2017-07-24 00:24:29 318

原创 DC - 11 :结构体,共同体等

结构体一般形式:struct 结构体{    结构体所包含的成员变量};共用体:union  共用体名称{    成员列表};        结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。        结构体占用的内存大于等于所有成员占用的内存的总和(成员

2017-07-21 22:54:45 343

转载 DC - 10 :递归

看了半天的递归,看了两个例子。觉得递归这个东西需要自己会对问题分析,会总结,然后,不要想太多。对于递归问题,首先需要找到递归的点,其次需要找到边界条件。作者:YIHE陳链接:https://www.zhihu.com/question/24385418/answer/46241635来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。拿以前写的一篇

2017-07-19 20:04:53 452

原创 DC - 9:指针(3)

比较两个字符串的大小#include #include int main(){ char ch1[100]; char ch2[100]; gets(ch1); gets(ch2); char *p0 = ch1; char *p1 = ch2; int a = strlen(ch1); int b = strlen(ch2); int k = 0;

2017-07-18 20:29:03 268

原创 DC-8:指针(2)

上代码:/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name:Author:Jerey_Jobs Version:0.1 Date: Description:Funcion List:

2017-07-17 15:46:21 254

原创 DC-7:指针(1)

指针注意事项:1、指针这个词很形象,指针就是地址,指向这个地址的。我们常用的变量例如int a,char ch, 都只是内存的助记符,弄清楚内存存值得本质, 就可以很方便的理解指针。2、&为取地址符,用于获取变量的地址。*称为指针运算符,用来取得某个地址上的数据。输出用%p,或者%#x。(x大小写会输出大小写两种不同形式相同的值)。3、对于一个指针首先应该明白这个变量的类型是指针,其次

2017-07-17 01:08:24 245

原创 DC-6:数组逆序的两种思路

#include #define N 10// for循环int main1(){ int a[N] = {0,1,2,3,4,5,6,7,8,9}; int i; int tmp; for (i = 0; i < N/2; i++) { tmp = a[i]; a[i] = a[N-i-1];int main(){ int a[N] = {0,1,2,3,4,

2017-07-16 00:17:35 502

原创 DC-5:选择排序与冒泡排序

#include #define N 10int main(){ int a[N] = {9,8,7,6,32,40,3,2,1,0}; int i,j; int tmp; // 外层控制比较的轮数 for (i = 0; i < N-1; i++) { // 内层循环控制每一轮比较需要比较的次数 for (j = 0; j < N-i-1; j++) {

2017-07-14 23:45:37 451

原创 DC-4: 循环结构

int main2(){ char ch = 0; while (ch != '\n') { scanf ("%c", &ch); printf ("%c", ch); } return 0;}这是基本的从终端读入一条命令。很好理解,scanf一次一次读,当是'\n',便不再读入。include int main(){ int int_count = 0

2017-07-13 22:14:48 282

原创 DC-3:c基础

需要注意的知识点:对于取余运算符,结果的符号和%左边的那一个相一致。         Ex:5%8    余数是5                 -5%3   余数是 –2                     5%-3  余数是 2在一些编译中,有些程序是按照一定规则自动完成的,不需要我们操作。         'A' + 1 + 0.5   左侧三个数相加,首先会将

2017-07-12 22:51:28 387

原创 DC-2 : scanf的用法

部分内容参考:http://blog.csdn.net/kobesdu/article/details/39051399/scanf使用心得:        scanf()读取前面讨论的过的某种基本变量类型的值,请在变量前加上一个&;否则会出现读取非法地址,报段错误;        scanf()把一个字符串读进一个字符数组中,请不要使用&。    scanf()使

2017-07-11 20:25:40 384

原创 DC-1: xshell

初用xshell还不太顺手,用了几天觉得很方便,对于新手来说,掌握常用的命令,熟练的使用可以使自己的的编程变得很顺手。今天学习了程序设计基础,虽然之前也有学,这次更加理解每个部分的重要含义以及作用。今天的收获很多。例如头文件的也可以用" ",区别在于前者用于系统默认的头文件存放目录,后者先在程序所在目录查找头文件,找不到再去系统目录下寻找。程序的处理分为预编译,编译,汇编,链接四个步骤。常量变量的

2017-07-10 22:15:53 418

空空如也

空空如也

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

TA关注的人

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