- 博客(20)
- 问答 (1)
- 收藏
- 关注
原创 面试:C语言C++小知识总结(1)
(1)关于声明和定义的区别(变量可以被声明多次但是只可以被定义一次)声明:不分配内存空间定义:为变量分配地址和存储空间,还可以指定变量的初始值(定义也是声明,因为在定义的时候我们就声明了他的名字和类型)int a;//这样既是生命也是定义int a = 3;//定义extern int a;//声明,通过extern关键字声明变量而不是去定义它extern int a =
2016-07-31 15:26:00 306
原创 操作系统:死锁 //程序耦合性
死锁:如果有一组线程,每个线程都在等待一个事件的发生,这个事件只能由改组线程里面的另一线程发出,则我们称这组线程发生了死锁。 死锁发生的四个条件: 1.死锁发生的必要条件是条件有限。 2.持有等待,也就是所一个线程在请求新的资源的时候它原先获得的资源并不会释放。 3. 不能抢占。 4.循环等待条件。 死锁的应对: 1.容许发生死锁
2016-07-29 16:36:22 358
原创 数据结构:二叉树
之前自己看书去写了个二叉树,现在看来写的简直误人子弟。。。所以删了,决定重新写一篇。 二叉树:关于二叉树的学习过程中我的感悟最深的就是你要学好二叉树,那么前提你必须把递归掌握熟练,所以说递归对于二叉树来说至关重要。 关于二叉树的结点结构,需要一个数据域,两个指针域typedef struct BtNode{BtNode *leftchild;BtNode *righ
2016-07-28 10:25:38 369
原创 数据结构:广义表
概念:数组和广义表可以看成是线性表在下述含义上的扩展,表中数据元素本身也是一个数据结构。 广义表也可以看作是线性表的推广。 (1)广义表的元素可以是子表,而子表的元素还可以包含子表。 (2)列表可以被其他列表所共享。 (3)列表可以是一个递归的表,也就是说列表也可以是自身的子表。 由于广义表里面的数据元素可以具有不同的结构,所以
2016-07-25 11:18:48 1025
原创 算法:递归总结(2)例子
关于递归输出数组的全排列:按照分治的思想,将一个大的问题转化为一个小的问题,那么对于数组来说就是一次次的将他的维数减少,也就是可以先确定一个数,接着去确定n-1个数,然后依此思想,不断地分化出去,确定最后一个以后可以作为一个输出条件。 void Perm(int a[],int local,int len){if(local==len){for(int i = 0;i
2016-07-25 10:45:56 273
原创 自学java(1)
暑假无事可做。。。想来学一学java这就算是学习笔记了吧。(如果有看到这篇文章的java大神欢迎指教) 首先,花了好多时间终于把环境配置好了。。具体怎么做网上都有教程,我就不废话了然后用的是JCreator编译程序 第一个代码,世界上使用频率最多的helloworld,验证结束我环境没错public class hello{ public static void
2016-07-22 20:23:57 251
原创 面试题:较为完整的atoi的实现,奶牛苹果的最小搬运次数
写完才发现,要较为完整的考虑到所有情况真的是一件很不容易的事情,而且一写就写了200多行,自己都没有想到呀。#include #include #include int myatoi(char *str){int a[100];int result = 0;int max = ~(unsigned int)0/2;int i =
2016-07-21 10:33:01 353
原创 linux下的守护进程
守护进程特点:(1)生存期长,在系统自举的时候启动,仅在系统关闭时终止。 (2)没有控制终端,所以说他们是在后台运行的。 关于编写守护进程程序时要遵守的一些基本规则: (1)调用umask将文件模式创建屏蔽字设置为0。(防止由继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限) (2) 调用fork(),
2016-07-20 15:24:35 315
原创 UDP数据读写以及服务器客户端的通信
#include #include ssize_t recvfrom(int sockfd,void* buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t* addrlen);(recv(int sockfd,void* buf,size_t len,int flags))ssize_t
2016-07-19 19:30:27 2236
原创 信号总结
信号是由用户,系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常,linux信号可由如下条件产生: 信号产生条件: (1)对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号,比如输入Ctrl+C通常会给进程发送一个中断信号。 (2)系统异常,比如浮点异常和非法内存段访问。 (3)系统状态变化,比如alarm定时器到期将引起SIGALRM信号
2016-07-19 18:57:13 231
原创 linux下面一个简单ps的实现
理解重点:要清楚/proc目录下放的东西,数字目录的意思代表的就是相应的进程,stat里面的放置的就是该进程的讯息,你要理解stat里面放置的每一个信息代表的含义 核心思想:很简单,就是进入到相应文件去把里面的信息对应的提取出来 (1)进入/proc (2)判断是否是进程文件 (3)从文件的stat里面提取信息 我这里做了一
2016-07-19 10:42:43 1787
原创 线程的总结
UNIX进程有了多个控制线程以后,在程序设计时可以把进程设计成在同一时间不止做一件事情,每个线程处理各自独立的任务。 线程与进程的关系: 线程包含了表示进程执行环境必须的信息,其中包含表示线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。 进程的所有信息对该进程的所有线程都是共享的,包含可执行的程序文本,程序的
2016-07-18 18:10:10 365
原创 有名管道总结
有关无名管道的创建: #include int mkfifo(const char* pathname,mode_ mode); 如果是在linux环境下还可以直接在shell终端用mkfifo指令来创建管道文件。 FIFO常见用途: (1)FIFO由shell命令使用以便将数据从一条管道线传送到另一条,为此无需创建中
2016-07-18 16:06:42 1245
原创 无名管道总结
管道的两种局限性: (1)历史上他们是半双工的(也就是说数据只能在一个方向上流动),现在某些系统提供全双工的,但是为了最佳可移植性,我们还是按照半双工来。 (2)它们只能在具有公共祖先的进程之间使用::一个管道由一个进程创建,然后该进程调用fork,此后父子就成就可以应用该管道。 #include int pipe(int filedes[2]);//返回
2016-07-18 10:56:28 1307
原创 关于算法递归的总结
所谓递归就是指函数直接或者间接的调用自己的操作。 关于递归的注意事项:: (1)函数每次调用自己要再一次的分配新栈桢,栈的默认大小是1MB,虽然可调,但是必然会有被用完的时候,所以是不存在无限递归的。 拓展知识---数据存储位置:这一段是我在网上找的,看见很多人都在用,所以也不知道跟谁说就拿来了。一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区
2016-07-18 10:02:48 769
原创 关于execv函数
exec函数有六个但是实际上掌握好一个自己熟悉的就好了,因为他们作用都是一样的,我在这里最喜欢用的是execv,所以就只讨论这个函数的用法。 期间代码要和fork交相使用,fork有两个返回值,父进程返回子进程的pid,子进程返回0,因为子进程可以用getppid()知道父进程的pid(父进程唯一是这个理论的支持),而父进程可以拥有多个子进程,所以无法用函数去单纯获得子进程pid。
2016-07-17 15:23:21 30280 1
原创 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手
大端节序:高位节放在低地址 小端节序:高位节放在高地址 PC多采用小端节序,而手机多采用大端节序,在网络传播过程中一律转换成大端节序,所以大端节序也称为网络字节序。 主要头文件#include linux提供了四个函数来完成主机字节序和网络字节序的转换,我常用的是 #include unsigned sh
2016-07-16 18:35:54 3380
原创 对epoll总结
epoll是Linux特有的I/O复用函数(个人通过搜索资料和听老师讲解认为epoll相较于select和poll要更加优秀)。 epoll与poll和select的区别是他是用一组函数完成的任务而不是单个函数。 epoll把用户关心的文件描述符上面的事件放在内核里的一个时间表上,故epoll需要一个额外的文件描述符,来唯一标识这个时间表。 #include
2016-07-16 10:14:13 524
原创 对于poll的总结
参考书籍:linux高性能服务器编程,是个人对看书的总结,上文一致 poll系统调用和select类似,(个人认为poll和select掌握一个就好了)也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。 关于poll的原型 #include int poll(struct pollfd* fds,nfds_t nfds,int time
2016-07-15 21:07:40 2285
原创 对于select理解总结
select用途:在一段时间内,监听用户感兴趣的文件描述符上的可读可写和异常等时间。 对于select函数的接口: int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval* timeout); nfds表示监听的文件描述符总
2016-07-15 17:18:23 1051
空空如也
linux下ps命令用C语言的实现
2016-07-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人