自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python word写入

from docx import Documentfrom docx.shared import Inchesdocument = Document()document.add_heading(u'这是标题', 2) #插入标题document.add_paragraph(u'有个图片') #插入段落document.add_picture('./0f2a7a326c...

2019-08-30 17:59:11 976

原创 socket之multi_server

#include#include //strlen#include //strlen#include#include //inet_addr#include //write #include //for threading , link with lpthread void *connection_handler(void *); int main(int

2017-05-12 10:55:11 547

原创 socket之send

#include#include //strlen#include#include //inet_addr int main(int argc , char *argv[]){ int socket_desc; struct sockaddr_in server; char *message; //Create socket s

2017-05-11 11:02:06 377

原创 socket之recv

#include#include //strlen#include#include //inet_addr int main(int argc , char *argv[]){ int socket_desc; struct sockaddr_in server; char *message , server_reply[2000];

2017-05-10 13:24:52 4458

原创 socket之gethostbyname

#include //printf#include //strcpy#include#include //hostent#include int main(int argc , char *argv[]){ // char *hostname = "www.163.com"; char *hostname = "www.njit.edu.cn"; char i

2017-05-09 08:51:32 1464

原创 socket之connect

#include#include#include //inet_addr int main(int argc , char *argv[]){ int socket_desc; struct sockaddr_in server; //Create socket socket_desc = socket(AF_INET , SOCK_STREA

2017-05-08 10:23:48 356

原创 socket之bind

#include#include#include //inet_addrint main(int argc , char *argv[]){ int socket_desc; struct sockaddr_in server; //Create socket socket_desc = socket(AF_INET , SOCK_STR

2017-05-07 09:20:22 359

原创 socket之accept

#include#include#include //inet_addr int main(int argc , char *argv[]){ int socket_desc , new_socket , c; struct sockaddr_in server , client; //Create socket socket_desc = s

2017-05-06 09:39:40 520

原创 linux下ls命令模拟

#include #include #include #include #include void do_ls(char[]);void dostat(char *);void show_file_info( char *, struct stat *);void mode_to_letters( int , char [] );char *uid_to_name( uid_t

2017-05-05 20:45:54 331

转载 C/S和B/S的区别

1.什么是C/S结构C/S (Client/Server)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。C/S结构可以看做是胖客户端架构。客户端实现绝大多数的业务逻辑处理和界面展示,作为客户端的部分需要承受很大的压力,从分利用客户端的资源,对客户机的要求较高。其实现可以

2017-05-03 22:43:48 1470

原创 mycat.c

打开当前目录下的文件 foo.txt ,并将其内容显示出来。如果该文件不存在,就报告错误并退出。#include#include#include#include#include#include#define BUFFERSIZE 1024int main(int argc,char *argv[]){ int openfile; int byteread;

2017-03-20 08:54:29 613

原创 mycopy.c

#include#include#include#include#include#include#include#includeint main(int argc,char *argv[]){ int ffd,tfd; int byteread,bytewrite; char buffer[1024]; char *ptr; if(argc != 3) //

2017-03-19 11:27:05 857

转载 C/S和B/S的区别

1.什么是C/S结构C/S (Client/Server)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。C/S结构可以看做是胖客户端架构。客户端实现绝大多数的业务逻辑处理和界面展示,作为客户端的部分需要承受很大的压力,从分利用客户端的资源,对客户机的要求较高。其实现可以

2017-01-13 23:25:00 596

原创 单向带表头链表中找节点

List *list_middle(List *l){List *p1;List *p2;p1 = p2 = l;while(p1 != NULL){if(p1->next){p1 = p1->next->next;}else{return p2;p2 = p2->next;}}return p2;}

2017-01-12 11:25:56 309

原创 进程的组成部分

在Linux系统中进程由以下三部分组成:①进程控制块PCB;②数据段;③正文段。        Linux系统为了节省进程控制块所占的内存空间,把每个进程控制块分成两部分。一部分常驻内存,不管进程是否正占有处理器运行,系统经常会对这部分内容进行查询和处理,常驻部分内容包括:进程状态、优先数、过程特征、数据段始址、等待原因和队列指针等,这是进行处理器调度时必须使用

2017-01-11 18:39:42 970

原创 进程的三个基本状态,以及三个状态之间切换的条件

一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。 (1) 就绪->执行就绪状态是指进程获得了调度程序为之分配的除了CPU时间之外的其他必要资源,只要CPU时间一到位就可执行了。处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。 (2) 执行->就绪处于执行状态的进程在其执行过程

2017-01-10 22:14:48 1629

原创 常量与变量的区别

常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,‘a’‘b’为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。  变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量

2017-01-09 22:47:17 5064

转载 进程的组成部分

在Linux系统中进程由以下三部分组成:①进程控制块PCB;②数据段;③正文段。        Linux系统为了节省进程控制块所占的内存空间,把每个进程控制块分成两部分。一部分常驻内存,不管进程是否正占有处理器运行,系统经常会对这部分内容进行查询和处理,常驻部分内容包括:进程状态、优先数、过程特征、数据段始址、等待原因和队列指针等,这是进行处理器调度时必须使用的一

2017-01-08 18:27:03 1531

原创 C程序的生成过程

1.C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。2.源程序的扩展名为.c,目标程序的扩展名为.obj,可执行程序的扩展名为.exe。

2017-01-07 20:55:04 646

原创 C语言的程序是由什么组成

程序由输入、运算、输出三部分组成由用户输入数据(键盘\文件\其它输入设备)由程序控制运算数据(数学运算、逻辑运算)向输出设备(打印机、显示器、文件、数据库)输出运算结果。程序的内容主要是逻辑控制语句、数据、调用的系统功能三部份组成逻辑控制语句用来组成“算法”来组织和控制数据的运算加工和流向。系统功能是由计算机硬件(中断调用)、操作系统(API)、类库\函数库给出的、用户定义的函数。它们

2017-01-06 22:40:18 29714

原创 数据库概念

1、数据数据是客观事物的反映和记录,是用以载荷信息的物理符号。数据不等同于数字,数据包括两大类,及数值型数据和非数值型数据。2、信息信息是指有意义的数据,即在数据上定义的有意义的描述。3、数据处理数据处理就是将数据转换为信息的过程。数据处理包括:数据的收集、整理、存储、加工、分类、维护、排序、检索和传输等一系列活动的总和。4、数据库数据库是数据库系统的核心,是被管理的对象。5、数据

2017-01-05 15:45:44 259

原创 结构化程序设计的基本结构与特点

结构化程序设计方法主要由以下三种基本结构组成:1)顺序结构:顺序结构是一种线性、有序的结构,它依次执行各语句模块。2)循环结构:循环结构是重复执行一个或几个模块,直到满足某一条件为止。3)选择结构:选择结构是根据条件成立与否选择程序执行的通路。采用结构化程序设计方法,程序结构清晰,易于阅读、测试、排错和修改。由于每个模块执行单一功能,模块间联系较少,使程序编制比过去更简单,程序更可

2017-01-04 21:30:44 9627

原创 软件工程 基本概念

软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航

2017-01-03 22:36:34 395

转载 多进程编程的优缺点

多进程优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 通过增加CPU,就可以容易扩充性能; 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大 多线程缺点:逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据

2017-01-02 22:50:40 262

原创 结构化程序设计原则

1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化。 3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。 4.限制

2017-01-01 11:17:32 10677 3

转载 大端字节序、 小端字节序

大端字节序 :网络字节序小端字节序 :主机字节序大端字节序 :高字节序存于内存的低地址;低字节序存于内存的高地址。小端字节序 :   高字节序存于内存的高地址;低字节序存于内存的低地址。方法一:[cpp] view plain copy#include   #include   

2016-12-31 12:34:55 277

原创 进程间通信方式及比较

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资

2016-12-30 18:27:03 314

原创 strcpy,sprintf的区别

strcpy,sprintf的区别这些函数的区别在于实现功能以及操作对象不同。strcpy 函数操作的对象是 字符串 ,完成从源字符串到目的字符串的拷贝功能。snprintf 函数操作的对象 不限于字符串  :虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定

2016-12-29 22:51:13 1656

转载 什么是程序死锁,如何预防

在并发程序设计中,死锁 (deadlock) 是一种十分常见的逻辑错误。通过采用正确的编程方式,死锁的发生不难避免。 死锁的四个必要条件在计算机专业的本科教材中,通常都会介绍死锁的四个必要条件。这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生。我们来复习一下,这四个条件是:•互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执

2016-12-28 10:35:48 502

原创 TCP和UDP

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主

2016-12-27 21:27:24 177

原创 堆和栈的区别

堆和栈的区别:  一、堆栈空间分配区别:  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;  2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。  二、堆栈缓存方式区别:  1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;  2

2016-12-26 22:46:17 221

原创 链表与数组的区别

二者都属于一种数据结构从逻辑结构来看1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素

2016-12-25 21:22:54 205

转载 TCP三次握手

TCP是如何保证数据可靠传输TCP为应用程序提供可靠的通信连接,因为他采用了三次握手协议,三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互。第一次握手:客户端发送SYN包到服务器,并进行SYN_SEND状态,等待服务器确认;第二次握手:服务器收到SYN包并确认,同时自己发送一个SYN+ACK包,此时服务器进入SYN_RECV状态第三次握手

2016-12-24 22:52:55 177

原创 打印菱形

* * * * * * * * ** * * * * * * * * * * * * * * * #include int main(){ int i,j,k; for(i=1;i<5;i++) //上四行 { for(j=1;j<=5-i;j++) printf(" "); //空格 for(k=1;k<=2*i-1;k

2016-12-23 22:33:39 287

原创 signal_test.c

#include #include #include #include void myfunc(int sign){ if(sign == SIGINT) { printf("hello world!\n"); } if(sign == SIGQUIT) { printf("exit!\n"); exit(1);

2016-12-22 22:58:55 274

转载 c++整数类型

C++中提供的整数类型有三种:int、long、short,每种类型又分为有符号和无符号两种类型。有符号整数既可以表示非负整数,又可以表示负整数;但是,无符号整数不能表示负数,只能表示非负整数。(一)无符号整数    在内存中,int整数通常占4字节,这里,我们假定int为32位,那么无符号整数表示的取值范围为0x00000000~0xFFFFFFFF,转换为十进制为0~42949

2016-12-21 23:21:45 1580

转载 信号的生命周期

信号生命周期为从信号发送到信号处理函数的执行完毕。对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:1、信号"诞生"。信号的诞生指的是触发信号的

2016-12-20 18:51:22 1381

原创 shmwrite.c

#include #include #include #include #include "shmdata.c"#include #define BUFFSIZE 2048int main(){ int running = 1; void *shm = NULL; struct shared_use_st * shared = NULL; cha

2016-12-19 19:44:14 264

原创 msg.c

#include #include #include struct msg_buf { int mtype; char data[255]; }; int main(){ key_t key; int msgid; int ret; struc

2016-12-18 21:49:11 380

原创 shmread

#include #include #include #include #include "shmdata.c"#include int main(){ int running = 1; void *shm = NULL; struct shared_use_st * shared; int shmid; shmid = shmg

2016-12-17 22:47:47 284

空空如也

空空如也

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

TA关注的人

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