// An highlighted block
#include<iostream>
#include<string>
#include<stdio.h>
#include<time.h>
#pragma warning(disable:4996)
constexpr auto disk_size = 1024*1024;
constexpr auto linebtye = 40;//每行字节数
using namespace std;
struct catalg;
struct loadingblock
{int times;//测试次数float VarNumber;//版本号char name[100];
};
struct freetable {int address;       //已分分区起始地址int length;        //已分分区长度,单位为字节int flag;            //已分配表区登记栏标志,用0表示空栏目,
}free_table[100];
struct superblock//超级块
{int Size;int FileNumber;catalg* itree;freetable* ftree;char* buffer;
};
struct fcb//文件管理结构
{string  name;char change_time[100];int  classnumber;//1为可读写long address;int size;
};
struct catalg//目录节点
{string name;char change_time[100];catalg* above;catalg* down[100];;//每级目录至多100个文件目录fcb inode [100];//每级目录至多100个文件int cnumber;int inumber;
};loadingblock* load;
superblock* ZhnSuper;
catalg* ctree;
catalg* nowcpoint;
char* buffer;
int fs;
catalg* last[3]; int lasti;//历史目录记录
void catalg_write(FILE* t, catalg* g)
{fwrite(g, sizeof(catalg), 1, t);catalg* m;int i = 0;while (i < g->cnumber){m = g->down[i++];catalg_write(t, m);}}
void catalg_read(FILE* t, catalg* g)
{fread(g, sizeof(catalg), 1, t);catalg* m;int i = 0;while (i < g->cnumber){g->down[i] = new catalg;m = g->down[i++];catalg_read(t, m);m->above = g;}}
string getnow(int i)//获取当前时间
{time_t now = time(NULL);string t = ctime(&now);
if(i==1)  cout  << t;
for (int i = 0; i <t.size(); i++)
{if (t[i] != '\n')t[i] = t[i];elset[i] = 0;
}return t;
}
void stringtochar(char *a,string b)//string转char
{strcpy(a, b.c_str());
}
void superblock_info()//超级块信息
{getnow(1);cout << "现有文件" << ZhnSuper->FileNumber << "个,\n共" << ZhnSuper->Size << "B\n";}
void delete_fcb(int t)
{for (int i = t; i < nowcpoint->inumber; i++){nowcpoint->inode[i] = nowcpoint->inode[i + 1];}}
void var();
void copy_(string name, catalg* p,catalg* nowc);
void copy(string name, catalg* p);void init()//操作系统初始化
{getnow(1); cout << "系统开始载入\n";FILE* disk = fopen("disk.txt", "rb");ZhnSuper = new superblock;load = new loadingblock;ctree = new catalg;if (!disk)//创建系统盘{getnow(1);cout << "欢迎第一次使用该模拟系统\n开始创建系统盘\n";disk = fopen("disk.txt", "wb");fs = 0;ZhnSuper->buffer = new char[disk_size];buffer = ZhnSuper->buffer;for (int i = 0; i < disk_size; i++){ZhnSuper->buffer[i] = '\0';}strcpy(load->name, "计创18张海纳");load->times = 116; load->VarNumber = 2.1;ZhnSuper->FileNumber = 0;ZhnSuper->ftree = NULL;ZhnSuper->Size = 0;ZhnSuper->itree = NULL;ctree->cnumber = 0;string a = getnow(0);ctree->inumber = 0;ctree->above = NULL;ctree->name = "root";stringtochar(ctree->change_time, getnow(0));ZhnSuper->itree = ctree;fcb one;one.name= "os.txt";time_t now = time(NULL);stringtochar(one.change_time, getnow(0));string temp = "This is fox's disk that cost whole week to creat it";one.classnumber = 1;one.size = strlen(temp.c_str()) ;one.address =0;for (int i = 0; i <one.size; i++){buffer[i + one.address] = temp[i];}free_table[fs].address = one.address+one.size;free_table[fs].flag =1;free_table[fs].length = disk_size - one.size;catalg* os = new catalg;os->name = "os";os->above = ctree;ctree->down[ctree->cnumber++] = os;os->inumber = 0;os->cnumber = 0;os->inode[os->inumber++] = one;stringtochar(os->change_time, getnow(0));ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;int lasti = 0; last[lasti++] = ctree;fwrite(load, sizeof(loadingblock), 1, disk);fwrite(ZhnSuper, sizeof(superblock), 1, disk);catalg_write(disk, ctree);fwrite(&free_table, sizeof(freetable), 100, disk);fwrite(ZhnSuper->buffer, sizeof(char) * disk_size, 1, disk);fclose(disk);nowcpoint = ctree;getnow(1);cout << "系统盘创建成功\n";return;}int lasti = 0; last[lasti++] = ctree;int mt;mt = fread(load, sizeof(loadingblock), 1, disk);load->times++;mt=fread(ZhnSuper, sizeof(superblock), 1, disk);catalg_read(disk, ctree);mt = fread(&free_table, sizeof(freetable), 100, disk);ZhnSuper->buffer = new char[disk_size];mt = fread(ZhnSuper->buffer, sizeof(char) * disk_size, 1, disk);buffer = ZhnSuper->buffer;nowcpoint = ctree;var();superblock_info();fclose(disk);
}void update()//更新数据{FILE* disk = fopen("disk.txt", "wb");fwrite(load, sizeof(loadingblock), 1, disk);fwrite(ZhnSuper, sizeof(superblock), 1, disk);catalg_write(disk, ctree);fwrite(&free_table, sizeof(freetable), 100, disk);fwrite(ZhnSuper->buffer, sizeof(char) * disk_size, 1, disk);fclose(disk);}void recyce(int address,int size){int il, ir, flagl, flagr; flagl = flagr = 0;for (il = 0; il < 100; il++)//寻找上空闲if (free_table[il].flag == 1 && free_table[il].address + free_table[il].length == address){flagl = 1;break;}for (ir = 0; ir < 100; ir++)//寻找上空闲if (free_table[ir].flag == 1 && free_table[ir].address == address + size){flagr = 1;break;}if (flagl && flagr){free_table[il].length += size + free_table[ir].length;free_table[ir].flag = 0;}else if (flagl){free_table[il].length += size;}else if (flagr){free_table[ir].length += size;free_table[ir].address -= size;}else{int i;for (i = 0; i <100; i++)if (free_table[i].flag == 0){break;}free_table[i].address = address;free_table[i].length = size;free_table[i].flag = 1;}}void outpt(catalg *p)//辅助输出上级菜单{if (p == NULL)return;outpt(p->above);cout << "/" << p->name;}void out_place()//输出每次操作位置{cout << "zhn:";outpt(nowcpoint);cout << endl;}void out_catalg()//输出当前位置各级信息{cout << "序号" << " " << "名称" << "  " << "属性" <<"       "<<"修改时间"<< endl;for (int i = 0; i < nowcpoint->cnumber; i++){cout << i+1 << "    " << nowcpoint->down[i]->name << "  " << "文件夹" << " "<< nowcpoint->down[i] ->change_time<<endl;}for (int i = 0; i < nowcpoint->inumber; i++){cout << i+1 << " " << nowcpoint->inode[i].name<< "  " << " 文件" << " " << nowcpoint->inode[i].change_time << endl;}cout << "...\n";}void outds(catalg* p)//辅助完成dir_s{for (int i = 0; i < p->inumber; i++){cout << i + 1 << "  " << p->inode[i].name << " " << " 文件" << " " << p->inode[i].change_time << endl;}for (int i = 0; i < p->cnumber; i++){catalg* temp = p->down[i];outds(temp);}
} int find_address(int  size)//寻找适合大小的空间存放文件{int address; int i;for (i = 0; i < 100; i++){if (free_table[i].flag == 1 && free_table[i].length > size){address = free_table[i].address;break;}}free_table[i].address += size;free_table[i].length -= size;if (i == 100)return -1;return address;}void recu_copycatl(catalg* now, catalg* p){catalg *t=new catalg;p->down[p->cnumber++] = t; *t = *now;t->inumber = 0; t->cnumber = 0;string a; a = getnow(0);strcpy(t->change_time, a.c_str());for (int i = 0; i < now->inumber; i++){copy_(now->inode[i].name, t,now);}for (int  i = 0; i <now->cnumber; i++){recu_copycatl(now->down[i], t);}}void recu_find( string a, catalg* p){for (int i = 0; i < p->inumber; i++){if (p->inode[i].name == a){outpt(p);cout << " " << p->inode[i].name << " " << " 文件" << " " << p->inode[i].change_time << endl;}}for (int i = 0; i < p->cnumber; i++){catalg* temp = p->down[i];recu_find(a,temp);}}void dir()//文件浏览命令//test{string local;char temp = getchar();while (temp!='\n'){if(temp!=' ') local.push_back(temp);temp = getchar();}if(local=="...")//返回上一级{if (nowcpoint->above != NULL){last[lasti % 3] = nowcpoint;lasti++;nowcpoint = nowcpoint->above;}else cout << "没有上一级!\n";return;}if (local == "\\s")//显示所有目录下文件{outds(nowcpoint); return;}int falg = 0; int i;for (i = 0; i < nowcpoint->cnumber; i++){if(nowcpoint->down[i]->name==local){falg = 1; break;}}if (falg){last[lasti % 3] = nowcpoint;lasti++;nowcpoint = nowcpoint->down[i];}}void dir(string local)//文件浏览命令//test{if (local == "...")//返回上一级{if (nowcpoint->above != NULL){last[lasti % 3] = nowcpoint;lasti++;nowcpoint = nowcpoint->above;}else cout << "没有上一级!\n";return;}if (local == "\\s")//显示所有目录下文件{outds(nowcpoint); return;}int falg = 0; int i;for (i = 0; i < nowcpoint->cnumber; i++){if (nowcpoint->down[i]->name == local){falg = 1; break;}}if (falg){last[lasti % 3] = nowcpoint;lasti++;nowcpoint = nowcpoint->down[i];}else{cout << "输入不正确\n";}}void cd()//目录访问//untest{string local;char temp = getchar();while (temp != '\n'){if (temp != ' ')local.push_back(temp);temp = getchar();}if (local.empty() || local == "~"){last[lasti % 3] = nowcpoint;lasti++;nowcpoint = ctree;}else if (local == "-"){lasti--; if (lasti <0 ) lasti = 0;nowcpoint = last[lasti % 3];}else if (local == "..."){dir("...");}else {int i = 0;while (i < local.size()){string temp;for (int t = 0; i < local.size() && local[i] != '/'; t++, i++){temp.push_back(local[i]);}int falg = 0; int t;for (t = 0; t < nowcpoint->cnumber; t++){if (nowcpoint->down[t]->name == temp){falg = 1; break;}}if (falg){dir(temp); i++;}else{cout << "输入不正确\n";}}}}void read()//读文件命令//test{string local;char temp = getchar();while (temp != '\n'){if (temp != ' ') local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == local){falg = 1; break;}}if (falg){cout << "内容为:";fcb temp;temp = nowcpoint->inode[i];for (int i = 0; i <temp.size; i++){cout<< buffer[temp.address + i];}cout << endl;}else{cout << "输入不正确\n";}} void creat()//创建文件//test{cout << "请输入文件名:";string temp;fcb one;cin>> one.name ;time_t now = time(NULL);stringtochar(one.change_time, getnow(0));cout << "请输入内容:";cin >>temp;one.classnumber = 1;one.size = strlen(temp.c_str());one.address = find_address(one.size);if (one.address == -1){cout << "空间不足,创建失败\n";return;}for (int i = 0; i < one.size; i++){buffer[i + one.address] = temp[i];}nowcpoint->inode[nowcpoint->inumber++] = one;stringtochar(nowcpoint->change_time, getnow(0));ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;}void del()//untest{string local;char temp = getchar();while (temp != '\n'){if (temp != ' ') local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == local){falg = 1; break;}}if (falg){int address = nowcpoint->inode[i].address;int size = nowcpoint->inode[i].size;delete_fcb(i);ZhnSuper->FileNumber--;ZhnSuper->Size -= size;nowcpoint->inumber--;recyce(address, size);}else{cout << "输入不正确\n";}}void md()//创建目录//test{string name;char temp = getchar();while (temp != '\n'){if (temp != ' ')name.push_back(temp);temp = getchar();}if (name.empty())return;nowcpoint->down[nowcpoint->cnumber]=new catalg;catalg* tem = nowcpoint->down[nowcpoint->cnumber++];tem->name = name;tem->above = nowcpoint;tem->inumber = 0;tem->cnumber = 0;string a = getnow(0);strcpy(tem->change_time, a.c_str());}void rd()//移除目录{string name;char temp = getchar();while (temp != '\n'){if (temp != ' ') name.push_back(temp);temp = getchar();}if (name.empty())return;int falg = 0; int t;for (t = 0; t < nowcpoint->cnumber; t++){if (nowcpoint->down[t]->name == name){falg = 1; break;}}if (falg){for (int i = t; i < nowcpoint->cnumber; i++){nowcpoint->down[i] = nowcpoint->down[i + 1];}nowcpoint->cnumber--;}else{cout << "输入不正确\n";}}void rename(){string name;char temp = getchar();while (temp != '\n'){name.push_back(temp);temp = getchar();}if (name.empty())return;int falg = 0; int t;for (t = 0; t < nowcpoint->cnumber; t++){if (nowcpoint->down[t]->name == name){falg = 1; break;}}if (falg){cout << "请输入更改的名字:\n";string name;cin >> name;nowcpoint->down[t]->name=name;}else{for (t = 0; t < nowcpoint->cnumber; t++){if (nowcpoint->inode[t].name == name){falg = 1; break;}}if (falg){cout << "请输入更改的名字:\n";string name;cin >> name;nowcpoint->inode[t].name = name;}}}
void  var(){cout <<"作者为"<< load->name<<"\n这是此作品第"<<load->times<<"次运行,版本号为"<<load->VarNumber<<".还请希望老师高抬贵手\n";}
void copy()
{string name;char temp = getchar();while (temp != '\n'){if (temp != ' ')name.push_back(temp);temp = getchar();}if (name.empty())return;int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == name){falg = 1; break;}}fcb now; now = nowcpoint->inode[i];if (falg){cout << "请输入其复制地址\n";string local;temp = getchar();while (temp != '\n'){local.push_back(temp);temp = getchar();}catalg* p =ctree;int i = 0;while (i < local.size()){string temp;for (int t = 0; i < local.size() && local[i] != '/'; t++, i++){temp.push_back(local[i]);}if (temp == "root")temp.clear();int falgt = 0; int t;if (temp == "root")temp.clear();for (t = 0; t < p->cnumber; t++){if (p->down[t]->name == temp){falgt = 1; break;}}if (falgt){p= p->down[t]; i++;}}fcb one;one = now;one.address = find_address(one.size);string a; a = getnow(0);strcpy(one.change_time, a.c_str());ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;for (int i = 0; i < one.size; i++){buffer[one.address + i] = buffer[now.address + i];}p->inode[p->inumber++] = one;}}
void copy(string name, catalg* p)
{int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == name){falg = 1; break;}}fcb now; now = nowcpoint->inode[i];if (falg){fcb one;one = now;one.address = find_address(one.size);string a; a = getnow(0);ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;strcpy(one.change_time, a.c_str());for (int i = 0; i < one.size; i++){buffer[one.address + i] = buffer[now.address + i];}p->inode[p->inumber++] = one;}}
void copy_(string name, catalg* p,catalg* nowc)
{int falg = 0; int i;for (i = 0; i < nowc->inumber; i++){if (nowc->inode[i].name == name){falg = 1; break;}}fcb now; now = nowc->inode[i];if (falg){fcb one;one = now;one.address = find_address(one.size);string a; a = getnow(0);ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;strcpy(one.change_time, a.c_str());for (int i = 0; i < one.size; i++){buffer[one.address + i] = buffer[now.address + i];}p->inode[p->inumber++] = one;}}
void xcopy()
{string local;char temp = getchar();while (temp != '\n'){if (temp != ' ')local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->cnumber; i++){if (nowcpoint->down[i]->name == local){falg = 1; break;}}catalg* m;m = nowcpoint->down[i];if (falg){cout << "请输入其复制地址\n";string local;temp = getchar();while (temp != '\n'){local.push_back(temp);temp = getchar();}catalg* p = ctree;int i = 0;while (i < local.size()){string temp;for (int t = 0; i < local.size() && local[i] != '/'; t++, i++){temp.push_back(local[i]);}int falgt = 0; int t;for (t = 0; t < p->cnumber; t++){if (p->down[t]->name == temp){falgt = 1; break;}}if (falgt){p = p->down[t]; i++;}}recu_copycatl(m, p);//across_copyfcb(m, p);}
}
void find_txt()
{string local;char temp = getchar();while (temp != '\n'){if (temp != ' ')local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == local){falg = 1; break;}}if (falg){fcb find; find = nowcpoint->inode[i];cout<<"请输入查找内容:";string point; cin >> point;int address = find.address;int i, j; i = j = 0;while (i < find.size && j < point.size()){if (buffer[i+address] == point[j]){i++; j++;}else{i = i - j + 1;j = 0;}}i += address;if (j == point.size()){cout << "字符串存在\n";string out_temp;if (i -j- 4 >= address&& i+4 <= address+find.size){for (int t = i - j -4; t<i+4 ; t++){out_temp.push_back(buffer[t]);}cout << "上下文:" << out_temp << endl;}else if (i - j - 4 >= address){for (int t = i - j - 4; t < i  ; t++){out_temp.push_back(buffer[t]);}cout << "上下文:" << out_temp << endl;}else if (i + 4 <= address + find.size){for (int t = i - j; t < i+4; t++){out_temp.push_back(buffer[t]);}cout<<"上下文:" << out_temp << endl;}else{for (int t = i - j ; t < i ; t++){out_temp.push_back(buffer[i - j + address]);}cout << "上下文:" << out_temp << endl;}}else{cout << "未找到\n";}}
}
void more()//从第it行开始,读n行
{string local; char temp = getchar();while (temp != '\n'){if (temp != ' ')local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == local){falg = 1; break;}}if (falg){int it,  n;cout << "请输入开始行数"; cin >> it;cout << "请输入结束行数"; cin >> n;it--; n--; int t=0;fcb temp;temp = nowcpoint->inode[i];for (int i = it*linebtye; i < temp.size&&i<n*linebtye; i++){if((i-t) % linebtye == 0&&i!=0)cout << endl;cout << buffer[temp.address + i];if (buffer[temp.address + i] == ',' || buffer[temp.address + i] == '.' || buffer[temp.address + i] == ';' || buffer[temp.address + i] == '\n'){cout << endl; t++;}}cout << endl;}else{cout << "输入不正确\n";}
}
void exit()
{cout << "感谢使用此模拟系统,谢谢\n";
}
void time()
{getnow(1);
}
void find()
{string local;char temp = getchar();while (temp != '\n'){local.push_back(temp);temp = getchar();}catalg* p = ctree;int i = 0;while (i < local.size()){string temp;for (int t = 0; i < local.size() && local[i] != '/'; t++, i++){temp.push_back(local[i]);}if (temp == "root")temp.clear();int falgt = 0; int t;if (temp == "root")temp.clear();for (t = 0; t < p->cnumber; t++){if (p->down[t]->name == temp){falgt = 1; break;}}if (falgt){p = p->down[t]; i++;}}cout << "请输入查找名字\n"; string name; cin >> name;if (local == "\n"){recu_find(name, ctree);}else{recu_find(name, p);}
}void import()//10000*8以下大小文件导入
{cout << "请输入外部文件地址";string outaddress = "dpcq.txt"; cin >> outaddress;FILE* in = fopen(outaddress.c_str(), "r");if (!in) {cout << "文件打开错误\n"; return;}char* tbuffer = new char[10000]; char temp;fread(tbuffer, sizeof(char), 2, in);int i = 0;while ((temp = fgetc(in)) != EOF){tbuffer[i++] = temp;}fcb one;one.name = outaddress;time_t now = time(NULL);stringtochar(one.change_time, getnow(0));one.classnumber = 1;one.size = i;one.address = find_address(one.size);if (one.address == -1){cout << "空间不足,创建失败\n";return;}for (int i = 0; i < one.size; i++){buffer[i + one.address] = tbuffer[i];}nowcpoint->inode[nowcpoint->inumber++] = one;stringtochar(nowcpoint->change_time, getnow(0));ZhnSuper->FileNumber++;ZhnSuper->Size += one.size;fclose(in);
};
void export_()
{string name;string local;char temp = getchar();while (temp != '\n'){if (temp != ' ')local.push_back(temp);temp = getchar();}int falg = 0; int i;for (i = 0; i < nowcpoint->inumber; i++){if (nowcpoint->inode[i].name == local){falg = 1; break;}}if (falg){fcb* p = &nowcpoint->inode[i];cout << "请输入外部文件地址";string outaddress = "第一章.txt"; cin >> outaddress;FILE* out = fopen(outaddress.c_str(), "w");int address = p->address; int size = p->size;for (int i = address; i < address +size; i++){fputc(buffer[i], out);}fclose(out);}
}int menu(string a)
{if (a == "dir"){dir();}else if(a=="cd"){cd();}else if (a == "read"){read();}else if (a == "del"){del();}else if (a == "md"){md();}else if (a == "rd"){rd();}else if (a == "rename"){rename();}else if (a == "var"){var();}else if (a == "copy"){copy();}else if (a == "xcopy"){xcopy();}else if (a == "find_"){find_txt();}else if (a == "more"){more();}else if (a == "import"){import();}else if (a == "export"){export_();}else if (a == "time"){time();}else if (a == "creat"){creat();}else if (a == "exit"){exit(); return 0;}else if (a == "find"){find();}else {cout << "输入不正确\n";}
}
int main()
{init();int flag = 1;while (flag){getnow(1);out_place();out_catalg();string a; char temp = getchar();while (temp != '\n'&& temp != ' '){a.push_back(temp);temp = getchar();}flag = menu(a);cout << "---------------------------------------------------\n";}update();return 0;
}

操作系统课设之单线程版相关推荐

  1. 操作系统课设(ljh老师版)

    操作系统课设 完成一个文件模拟系统,做一个记录 #include<iostream> #include<string> #include<stdio.h> #inc ...

  2. 操作系统课设之简单 shell 命令行解释器的设计与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  3. 操作系统课设之基于信号量机制的并发程序设计

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  4. 操作系统课设之虚拟内存页面置换算法的模拟与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  5. 操作系统课设之内存管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  6. 操作系统课设之Windows 的互斥与同步

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  7. 操作系统课设之Linux 进程间通信

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  8. 操作系统课设之Linux 进程管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  9. 操作系统课设之Windows 进程管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

最新文章

  1. JavaScript 中 call、apply和bind的用法区别
  2. java web利用mvc结构实现简单聊天室功能
  3. Spring Boot实现一个天气预报系统(二)数据同步
  4. python 单继承的实现
  5. 当代年轻人,都有些不成文的规定?
  6. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题
  7. sql linux 160天,Ubuntu下用脚本执行sql语句(sqlite)
  8. 两化融合:唐山探路重工业城市智慧转型
  9. MySQL增删改查--之删
  10. Python+数据库+前端+Django
  11. HTML5期末大作业:家具家居网站设计——智能家居(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 学生静态网页制作...
  12. md5加密工具类(16位,32位,64位)
  13. DeviceDriver(十四):多点触摸(MT协议,Input子系统)
  14. String 判断纯数字 正则式
  15. 在线JSON转XML工具
  16. 数值分析学习(一)之交叉法(Bracketing Methods)求根
  17. 高等数学:第三章 微分中值定理与导数的应用(8)曲率
  18. 这届年轻人,是最孤独的一代吗?
  19. 微信公众平台接口程序定制菜单
  20. 白色相簿的季节(递归)

热门文章

  1. 【方案分享】华与华《爱的是酒》酣客品牌定位及传播咨询方案.pptx(附下载链接)...
  2. Django 入门教程
  3. 手机连接投影机的步骤_投影仪如何投屏手机?手机连接投影仪的步骤
  4. 【虚幻引擎UE】UE5 超实用插件推荐
  5. Win10没有wifi选项也没网络图标怎么办
  6. 重磅发布!GitHub App 正式上架
  7. php操作pdf文档输出,PHP生成PDF文档实用技巧
  8. 低版本360浏览器下,PDF.js部分文字显示不全的问题
  9. layui-layer.open打开新页面进行数据处理,处理完成后数据表格重载问题
  10. 12306抢票系统的NB解析