示例代码: 主要有二叉树的遍历(递归和非递归),创建树,按树状打印树,以及统计叶子结点的数量,计算树的高度。 /************************************************************************* > File Name: erchashu.c > Author: > Mail: > Created Time: 2018年10月30日 星期二 17时37分28秒 ************************************************************************/ #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 typedef struct N 继续阅读 >>


刘甜 18/11/02 21:11:43
线程这一章,着实不好理解,写上一篇博客时,我还没这么想, 今天做了几道关于线程的题,觉得还是不行呀,还是乖乖再来一遍吧。 私有数据: 线程同步 1、私有数据 为什么要有线程私有数据呢? 我们知道在多线程环境下,进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有,但是在程序设计的时候有时需要保存线程自己的全局变量,例如:变量errno:返回标准的错误码,errno不应该是一个局部变量,因为每个函数几乎都可以访问它,但它又不能作为一个全局变量,否则在一个线程里输出的可能是另一个线程的出错信息,那么,这种问题就可以通过创建线程的私有数据来解决。 线程私有数据:可以被此线程内的各个函数访问,但对其他线程是屏蔽的。 采用一键多值的技术,即一个键对应多个数值。 操作线程私有数据的函数主要有四个: (1)第一个 int pthread_key_create(pthread_key_t *key,void (*destr_function) (void 继续阅读 >>


刘甜 18/08/12 16:38:35
线程,我自己看到的两篇讲解比较生动形象的易于理解的博文,如下。 线程与进程之间的关系: http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 对线程的理解(一篇比较生动形象的讲解): http://mp.weixin.qq.com/s?__biz=MjM5NzA1MTcyMA==&mid=403498894&idx=2&sn=219c1a6001b5bb7e6bdc7963b1af8450&scene=2&srcid=0330UDNmQ linux操作系统是支持多线程的,它在一个进程内生成了许多个线程。一个进程可以拥有一至多个线程。多线程相对于多进程还是有不少优点的: 在多进程的情况下,每个进程都有自己独立的地址空间,而在多线程的情况下,同一进程内的的线程共享进程的地址空间。因此,创建一个新的进程时就要耗费时间来为其分配系统资源,而创建一个新的线程花费的时间就 继续阅读 >>


刘甜 18/08/08 14:54:56
dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下。 1、 dup函数 头文件及函数定义: #include <unistd.h> int dup(int oldfd); dup用来复制参数oldfd所指的文件描述符。当复制成功是,返回最小的尚未被使用过的文件描述符,若有错误则返回-1.错误代码存入errno中返回的新文件描述符和参数oldfd指向同一个文件,这两个描述符共享同一个数据结构,共享所有的锁定,读写指针和各项全现或标志位。 调用dup(oldfd)等效于 fcntl(oldfd, F_DUPFD, 0) 代码示例: #include<stdio.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> int main(int argc, char* argv[] 继续阅读 >>


刘甜 18/08/07 22:02:09
先来看下进程是什么? 1、首先进程是什么呢? 进程是一个动态的实体,是程序的一次执行过程。进程是操作系统资源分配的基本单位。 2、进程和程序有什么区别呢? 进程和程序的区别在于进程是动态的,程序是静态的,进程是运行中的程序,程序是一些保存在硬盘上的可执行的代码。 注:linux下可通过命令ps或pstree查看当前系统中的进程 linux操作系统中,每个进程都是通过唯一的进程ID标识的(此ID是一个非负数)。 在linux系统中,用于对进程进行控制的主要系统调用如下: fork:用于创建一个新进程。 exit:用于中止进程。 exec:用于执行一个应用程序。 wait:将父进程挂起来,等待子进程终止。 getpid:获取当前进程的进程ID nice:改变进程的优先级 5.进程状态 运行状态(R):程序正在运行 可中断等待状态(S):进程正在等待某个事件完成(如数据到达)。等待过程可被信号或定时器唤醒。 不可中断等待状态(D):进程等待某个事 继续阅读 >>


刘甜 18/08/02 21:20:39
这几天实现ls部分功能时,用到了一些,我觉得值得细究的东西,书上没有详细讲解,那就在这记录下来。 __LINE__用来指示本行语句在代码中所处的位置信息,如下: #include <stdio.h> int main() { printf("%d\n",__LINE__); printf("%d\n",__LINE__); printf("%d\n",__LINE__); }; 结果为: 还可以通过语句#line来重新设定LINE的值,举例如下: 注意:是设定#line 300的紧接着的下一行为为300. #include <stdio.h&g 继续阅读 >>


刘甜 18/07/29 21:22:23
linux下文件的操作 第一次写博客,感觉很奇妙,写什么?确实很纠结,想想还是总结一下这周学到的自我觉得容易忘记的东西吧,方便以后复习. 主要有以下两点 文件的创建、打开与关闭 获取文件属性 (1) 文件的创建与打开 这里主要用到open和creat函数以及close函数 open:系统调用用来打开或创建一个文件 creat:系统调用用来创建一个文件 close:系统调用用来关闭一个已经打开的文件 以下是它们的函数原型和对应的头文件 一. 对于open函数,它的第一个参数pathname是要打开和创建的含路径的文件名。 第二个参数flags是要打开文件的方式,这里flags需要着重注意,flags分为两类:主类,副类 主类: 1. O_RDONLY:以只读方式打开文件 2. O_WRONLY :以只写方式打开文件 3. O_RDWR :以可读可写方式打开文件 这三种打开方式互斥的,切不可同时使用。 副类: 1. O_ 继续阅读 >>


刘甜 18/07/29 15:05:52
1