数据结构及其概念 数据:客观事物的符号表示 数据元素:数据的基本单位 数据对象:性质相同的数据元素的集合 数据结构:是指相互之间具有一定里埃的数据元素的集合. 元素之间的相互关系称为逻辑结构 数据的逻辑结构 算法及其概念 算法:解决问题的步骤的描述, 在计算机中表现为指令的有限序列 算法的特性: I/O:算法有0个或者多个输入, 至少有一个输出 有穷性:无死循环, 能在可以接受的时间内完成 确定性:算法的每一步骤都有确定的含义, 不会出现二义性 可行性:算法的每一步都必须是可行的 线性表 线性表主要分为一般线性表, 串, 受限线性表(如栈, 队列等), 广义表等. 一般线性表是最基础, 最常用, 最简单的一种数据结构, 其主要的作用就是存储数据 按照物理结构可以划分为连续式和非连续式 链表 链表:是一种物理存储单元上非连续, 非顺序的存储结构. 数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列节点组成, 每个节点包括两个部分:数据域和指针域. 链表的基本操作: 链表的创建 链表的插入 链表的删 继续阅读 >>


祝一迪 16/08/04 15:54:28
参数简介 线程创建函数pthread_create有一个参数的类型为pthread_attr_t,该结构体的定义如下: typedef struct { int detachstate;//线程的分离状态 int schedpolicy;//线程的调度策略 struct sched_param schedparam;//线程的调度参数 int inneritsched;//线程的继承性 int scope;//线程的作用域 size_t guardsize;//线程栈末尾的警戒缓冲区大小 int stackaddr_set;//线程堆栈的地址集 void *stackaddr;//线程栈的位置 size_t stacksize;//线程栈的大小 }pthread_attr_t; 1.分离状态 线程的分离状态决定一个线程以什么样的方式来终止自己. 在默认情况下, 线程是非分离状态的,这种情况下, 原有的线程等待创建的线程结束. 只有当pthread_join()函数返回时, 继续阅读 >>


祝一迪 16/08/03 22:10:53
进程的介绍 进程代表程序的执行过程, 它是一个动态的实体, 随着程序的变化而不断的变化 在某个时刻进程的内容称作进程映像 所谓进程, 就是由正文段, 数据用户段以及系统数据段共同组成的一个执行环境 进程的状态 1.运行状态: 进程正在运行(每个时刻有且只能有一个进程正在运行) 2.就绪态: 进程正在运行队列中等待运行 3.阻塞态: 等待某种事情发生而阻塞 4.僵死状态: 进程已经终止, 但进程描述符依然存在, 直到父进程调用wait()函数后释放 进程控制块FCB struct task_struct { 1.状态信息 2.链接信息(链接符间的亲属信息, 如当前进程的父进程, 祖父进程, 兄弟进程, 子进程, 孙子进程等) 3.各种标识符(pid, uid, gid等) 4.进程间通信信息(管道, 消息队列, 共享内存等) 5.时间和定时器信息 6.调度信息 7.文件系统信息 8.虚拟内存信息 9.处理器环境信息 } 创建进程 1.分配PCB, 并将父进程PCB拷贝给新建的PCB. 子进程几乎继承了父进程所有的资源 2.检查进程是 继续阅读 >>


祝一迪 16/07/30 09:26:23
在暑假留校的这两周, 瑞神的linux系统编程系列讲座总共有四个小专题, 在这里我把瑞神讲座中的一些点总结一下 1.静态库和共享库 静态库: 概念: 静态库(以.a后缀标识)是指将所有相关的目标文件打包成为一个单独的文件, 即静态库文件.  静态库可作为链接器的输入,链接器会将程序中使用到的函数的代码从库文件中拷贝到应用程序中, 一旦链接完成, 在执行程序的时候就不需要静态库了. 共享库: 概念: 共享库(以.so后缀标识)是一个目标模块, 在运行时, 可以加载到任意的存储器地址, 并和一个在存储器中的程序链接起来, 这个或称成为动态链接, 是由一个叫做动态链接器的程序来执行的. 静态库和共享库的一些比较 由于每个使用静态库的应用程序都需要拷贝所用函数的代码, 所以静态链接的文件会比较大, 比较耗内存; 而共享库的源码只有一份, 应用程序需要用到库中的函数时, 通过地址就能找到共享库的位置, 并和应用程序链接起来,节省了内存. 2.计算机软件体系结构 计算机最底层的结构是硬件, 硬件上层是操作系统, 操作系 继续阅读 >>


祝一迪 16/07/30 08:32:14
问题提出: 最近小组的小伙伴们都在写my_ls,myshell, 可能经常会遇到这样的问题, 需要得到当前路径下的文件名 比如当前绝对路径:/home/dela/dela_c, 现在想得到dela_c怎么办, 反正我在实现这个问题的时候费了一番功夫 现在跟小伙伴们分享一个很简单的方法, 就是:basename和dirname系统调用!!! 函数声明 头文件: #include<libgen.h> 函数声明: char *dirname(char *path); char * basename(char *path); 函数用法 basename(): 截取path中的去目录部分的最后的文件名 dirname(): 截取path中的目录路径名 成功将返回文件名或目录名, 失败返回NULL 程序示例: #include<stdio.h> #include<libgen.h> #include<unistd.h> #include<string.h> #in 继续阅读 >>


祝一迪 16/07/29 15:09:05
问题提出:为什么用nice系统调用降低进程优先级不成功 nice系统调用 nice函数声明:#include<unistd.h> int nice(int increment); nice系统调用包含getpriority和setpriority这两个函数 getpriority函数和setpriority函数 函数声明:#include<unistd.h> int getpriority(int which, int who); int setpriority(int which, int who, int prio); nice系统调用是它们的一种组合形式: int nice(int increment) { int oldpro = getpriority(PRIO_PROCESS, getpid()); return setpriority(PRIO_PROCESS, oldpro+increment); } 示例: #include<stdio.h> #include< 继续阅读 >>


祝一迪 16/07/26 17:46:45
1.命令参数及其说明 ls:显示当前目录下的所有文件(不含隐藏文件) ls -a:显示当前目录下的所有文件(含隐藏文件) ls -l:显示当前目录下的所有文件的详细信息 ls -R:显示当前目录下的文件及其子目录下的所有文件 2.实现过程中遇到的问题 1.无法根据文件名获取正确的文件信息 解决:获取文件信息的文件名应该是绝对路径,而非简单的文件名 2.在显示时间信息之后自动换行,导致文件名和时间信息无法在同一行输出 解决:buf_time[strlen(buf_time)] = '\0'; 3.输出存储权限的数组在输出时会出现乱码 解决:存储权限的数组在定义时没有初始化!!! 祝一迪呀! 什么时候才能把数组初始化这点记住!!! 4.无法得到正确的当前目录 解决:对getcwd的认识还不够,为此我做了测试,在此链接github上的源码,以便日后复习 getcwb的链接:getcwb_test.c 5.在实现ls -R的时候递归会进入死循环 解决:当ls -R的时候,第一个和第二个检索的目录就是.和..这两个目录,即当前目录和当前目录的上一 继续阅读 >>


祝一迪 16/07/23 15:46:54
1.atoi()函数 函数声明:int atoi(const char *nptr); 头文件:#include<stdlib.h> 函数说明:将字符串转换成整数. 例如:atoi("777"); 这个函数怎么这么好用呢!以前竟然不知道! 2.exit()和return的区别 exit(0):正常运行程序并退出程序 exit(1):非正常运行程序导致程序退出 return:返回函数,若在非主函数中,则会退出函数并返回一个值 return是关键字;exit()是一个函数 return是语言级别的,表示了调用堆栈的返回;exit是函数调用级别的,表示了一个进程的结束 3.linux下的捕获:errno和strerror的使用 经常在调用linux系统API(设备程序编程接口)时出现一些错误.比如open(),creat()之类的函数会返回-1,出现错误,调用失败.这时需要知道错误u的原因,就用到了errno这个全局变量(也有人说是宏定义). 头文件:#include<errno.h> 每次 继续阅读 >>


祝一迪 16/07/20 21:55:02