- 博客(50)
- 收藏
- 关注
原创 PHP文件操作函数
读取整个文件的函数$string = file_get_contents(“test.txt”);……………………将文件内容转换为一整行字符串readfile(“test.txt”) …………………………………………自动将文件写入输出缓冲区$array =file(“test.txt”) …………………………………………返回全部文件体读取一行数据string = fgets()str...
2019-07-25 20:53:30 242
原创 PHP时间和日期函数的使用
array = getdate(时间戳) 将 时间戳 转化为关联数组(ex: “month”=>“07” …)。time() 获取当前时间戳。date(预定于常量) 格式化输出当前时间。microtime() 将当前时间戳划分为msec和sec两个值返回...
2019-07-24 11:59:52 303
原创 排序算法1
冒泡排序 选择排序 堆排序 插入排序直接上代码:#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#include<unistd.h>#define Maxarr 32void print(int arr[],size_t...
2018-08-28 17:58:10 298
原创 网络基础(对于计算机网络的理解)
1.网络分层及各层的协议网络可以由低向上分为物理层,数据链路层,网络层、传输层和应用层。五层协议。物理层:负责计算机与外部光电信号的传递,例如网线(hub集线器),光纤和wifi无线网络使用的电磁波均属于物理层。物理层的能力决定了网络通信的最大传输速率、传输距离、抗干扰性等相关性能。数据链路层:负责在计算机内部两个设备之间的数据帧的传送和识别。数据链路层的任务有:网卡设备的驱动、帧同步...
2018-08-28 17:47:43 1714
原创 tcp套接字编程
server.c#include<stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<errno.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#incl
2018-08-28 16:41:52 306
原创 udp编程套接字代码
server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<arpa/inet.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>
2018-08-28 16:39:37 365
原创 网络编程套接字
udp套接字代码 tcp套接字代码 两者的区别与优缺点:udp是面向无链接的不可靠的通信,客户端不需要和服务器建立链接,只需要知道服务器的IP和端口号就可以调用sendto函数向服务器发送请求(此时客户端的socket对应的IP和端口号都会被发送给服务器),服务器通过recvfrom函数调用得知了客户端的IP和端口号,可以向客户端发送信息。udp协议通信简单,效率高,但是...
2018-08-28 16:34:41 439
原创 大数据文件处理
1.给定一个大小超过100G的文件,其中存在IP地址,找到其中出现次数最多的地址。我们要对文件进行哈希切分:也就是利用哈希函数的思想,对文件中的IP做%1000计算 ,将余数为0~999的结果(以键值对的方式)分别输出到0~999号文件中。(每个文件的平均大小大约是100M左右) 找出每个文件中出现次数最多的IP,再次进行比较得到最大的IP值。注:操作系统可以依次读取硬盘中的100...
2018-07-18 18:16:01 666
转载 经典的大数据例题
先转载,理解之后再整理。前言:1、说明:一般解决大数据问题有两个思路:1)先将与这道题相关的所有的数据结构进行使用一遍,如果有合适的就直接进行使用2)如果不能直接使用,一般就要进行哈希切分,然后再使用合适的数据结构进行问题的解决2、在这里我先来介绍一种常用于大数据问题的方法:哈希切分1)先估算出要切分的大小2)然后使用哈希的除留余数法进行各个数据的映射 经典题:...
2018-07-17 17:00:04 549
原创 布隆过滤器 实现
bitmap.h#pragma once #include <stddef.h>#include<inttypes.h>typedef struct BitMap { uint64_t* data; size_t capacity; // max bit } BitMap; void BitMapInit(B...
2018-07-16 19:49:54 267
原创 位图相关代码实现
bitmap.hpragma once #include <stddef.h>#include<inttypes.h>typedef struct BitMap { uint64_t* data; size_t capacity; // max bit } BitMap; void BitMapIni...
2018-07-16 19:42:47 453
原创 哈希表(开散列)
HashOpen.h#pragma once #include<stddef.h>size_t HashMaxSize=1000; typedef int KeyType; typedef int ValType; typedef size_t (*HashFunc)(KeyType key); typedef struct HashElem...
2018-06-19 21:49:14 406
原创 哈希表闭散列(代码实现)
HashClose.h#pragma once #include <stddef.h>size_t HashMaxSize=1000;typedef enum Stat { Empty, Valid, Invalid // 当前元素被删除了 } Stat; typedef int KeyType; typedef int ValType;...
2018-06-19 21:45:27 424
原创 守护进程
#include <unistd.h>pid_t setsid(void); //创建一新的Session并且自己成为Session的Leader。该函数调用成功时返回新创建的Session的id(也就是当前进程的ID),出错返回-1;调用这个函数之前,当前进程不允许是进程组的leader否则会出错返回-1.、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、...
2018-06-15 15:01:14 245
原创 进程组、作业、会话与守护进程
1.进程组每个进程除了有一个进程ID外,还属于一进程组。通常进程组与作业相关联,可以收到同一终端的各种信号。 每个进程有唯一的一个进程组ID。组长进程可创建一个进程组,创建该组中的进程,然后终止。只要在某一个进程组中的一个进程存在,该进程组就存在,这与其组长进程是否终止无关。2.作业作业与进程组的区别:1.如果作业中某个进程创建了子进程,则该子进程属于进程组成员但不...
2018-06-15 12:18:45 333
转载 线程死锁
死锁的概念死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。死锁的必要条件虽然线程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。1)互斥条件:指线程对所分配到的资源进行排它性使用,即在一段时间内某资源只...
2018-06-14 21:51:25 186
原创 gdb调试多线程
gdb与多线程在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。这些都可以通过gdb实现。下面是gdb常用的功能:info threads:显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。thread ID:...
2018-06-14 21:36:41 228
原创 生产者消费者模型 、POSIX信号量、读写锁
生产者消费者模型 、POSIX信号量、读写锁 相关代码1. 生产者消费者模型列表内容2.POSIX信号量列表内容3.读写锁列表内容
2018-06-14 21:31:47 348
原创 生产者---消费者 、 读 者-----写者 模型相关代码实现
producter_consumer_model.c #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#define CONSUMERS_COUNT 8#define PRODUCERS_COUNT 8pthread_cond_t con...
2018-06-14 21:19:47 309
原创 pthread 函数中create、join 、detach的代码实现和运行结果
create.c#include<stdio.h>#include<unistd.h>#include<pthread.h>void* Entry1(void* arg){ (void)arg; while(1) { printf("hello world1!\n"); sleep(1); } retu...
2018-06-09 20:52:41 401
原创 线程
线程1.线程的定义在一个程序里的一个执行路线就叫做线程,或者说:“一个进程内部的控制序列就是线程。”2.进程和线程的区别进程是资源竞争的基本单位,线程是程序执行的最小单位。在一个进程内的线程共享进程的 正文段和数据段,也就是定义一个函数,在各个线程中个都可以调用,如果定义一个全局变量, 在各线程中都可以访问到。除此之外,线程还共享以下资源和环境:文件描述符表、每种信号...
2018-06-08 18:44:17 315
转载 gdb调试多进程
别人的文章,先复制下,等我有一定理解之后,再做总结。我们先看看我们的测试程序:/* in eg1.c */int wib(int no1, int no2){ int result, diff; diff = no1 - no2; result = no1 / diff; return result;}int main(){ p...
2018-06-05 19:01:29 248
原创 进程信号
信号的概念每个信号都有一个编号和一个宏定义的名称,这些宏定义可以在signal.h中找到。kill -l普通信号 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIG...
2018-06-01 16:50:17 260
原创 进程间通信
1.使用管道进行通信 server 创建管道mypipe,并以只读方式打开. client 以只写方式打开管道. 两者借助管道进行通信,若有一方退出,则另一方也退出。server.c#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>...
2018-05-29 17:55:30 263
原创 生成动态库和静态库
add.h#pragma once#include<stddef.h>int add(int a,int b);add.c#include"add.h"int add(int a, int b){ return a+b;}sub.h#pragma once#include<stddef.h>int sub(int a, int b);sub.c#...
2018-05-21 15:26:16 531
原创 myshell支持管道 、输入、输出、追加重定向
强调重要的一点 open 和 dup2 一定要在fork后的子进程中执行。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<ctype.h>#include<sys/wait.h>#include<s...
2018-05-18 18:45:14 702
原创 二叉搜索树--递归和循环实现
search_tree.h//实现二叉搜索树的递归和非递归版本 #pragma once #include<stddef.h>typedef char SearchTreeType; typedef struct SearchTreeNode { SearchTreeType key; // 关键码 struct SearchTreeNode* lch...
2018-05-17 12:51:10 288
原创 堆
heap.h// 1. 堆是一个完全二叉树 // 2. 堆有两种, 一种叫小堆(小根堆, 最小堆), // 一种叫大堆(大根堆, 最大堆). // 3. 以小堆为例, 这个树的根节点是这个树中的最小的元素 // 对于任意一个子树来说, 子树的根节点, 小于左右孩子节点的值. // 4. 以大堆为例, 这个树的根节点是这个树中的最大元素 // 对于任意一个子树来说, 子树的根...
2018-05-17 12:46:37 170
原创 二叉树
引用文件stack_seq.h #pragma once#include<stdlib.h>#include"binary_tree.h"typedef TreeNode* TypeStack;typedef struct SeqStack{ TypeStack* data; size_t size; size_t capacity; ...
2018-05-15 18:20:47 167
原创 栈和队列笔试题
两种方式实现最小栈minstack.c 引用 stcak_seq.h(详见栈的实现文章)https://blog.csdn.net/Alsnoa/article/details/80216882#include<stdio.h>#include"stack_seq.h"#define TEST_HEADER printf("==================%s========...
2018-05-11 20:07:16 379
原创 顺序队列和链式队列
queue_seq.h#pragma once#define MaxSize 1024typedef char TypeQueue;typedef struct SeqQueue{ TypeQueue data[MaxSize]; int front; int rear;}SeqQueue;void SeqQueuePush(SeqQueue* se...
2018-05-06 20:07:52 499
原创 顺序栈和链式栈的实现
stack_seq.h#pragma once#define MaxStack 1000typedef char TypeStack;typedef struct SeqStack{ TypeStack data[MaxStack]; TypeStack *top; size_t stacksize; }SeqStack;void InitSeqSt...
2018-05-06 18:33:28 496
原创 带头结点带环的双向链表
#pragma oncetypedef char DLinkType; typedef struct DLinkNode { DLinkType data; struct DLinkNode* next; struct DLinkNode* prev; } DLinkNode; void DLinkListInit(DLinkNode** head); DLinkNode...
2018-05-05 12:30:49 195
原创 myshell(支持管道)
首先总结一下思路:1. 如果要支持管道就首先需要分析命令中是否包含管道。(使用stringcmp函数)2.如果包含管道就将管道符号位置为NULL,然后将管道符号前后的命令分到两个指针数组中 即:tmp1[ ]和tmp2[ ]3.这个时候需要执行两个execvp函数,我们为了保证循环的进程不会被替换,需要fork两次,分别用孙子进程执行tmp1[ ]和子进程执行tmp2[ ]。4.关于管道创建的位置...
2018-05-02 23:44:39 927
原创 链表笔试题1
#include "linkedlist.h"/** * * @brief 逆序打印单链表. * * * * @param head * */ void LinkListReversePrint(LinkNode* head){ if(head==NULL) { return; } Lin...
2018-04-20 11:50:42 208
原创 进程控制 简单myshell的实现
#include<unistd.h>#include<sys/wait.h>#include<stdio.h>#include<stdlib.h>#include<string.h> void do_parse(char *buf,char* argv[]){ int i; int argc=0; ...
2018-04-19 17:19:24 323
原创 单链表操作
include<stdio.h>#include<stdlib.h>#include<string.h> typedef char LinkType; typedef struct LinkNode { LinkType data; struct LinkNode* next; } LinkNode; /** * ...
2018-03-25 20:52:51 136
原创 进程的调度算法、task_struct结构体、虚拟内存
先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只能站到队尾去。...
2018-03-23 19:00:19 648
原创 顺序表2
#include<stdio.h>#include<stdlib.h> #include<string.h>#define SeqListMaxSize 1000 typedef char SeqType; typedef struct SeqList { SeqType data[SeqListMaxSize]; si...
2018-03-18 20:43:21 208
原创 实现基于静态数组的顺序表的以下基本操作:
1. 初始化 2. 尾插 3. 尾删 4. 头插 5. 头删 6. 读任意位置元素 7. 修改任意位置元素 8. 查找指定元素值的下标 9. 在任意位置插#include <stdio.h>#include <stdlib.h>#include<string.h>#define max 100 typedef struct Seqlist { ...
2018-03-17 19:51:39 292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人