Linux小專案:停車場的實現。
標頭檔案:
/****************************wddv587************************************* FileName: 停車場/parking.h Verson: 1.0 Date: 2018.0814 Description: 停車場程式標頭檔案定義。 Verson: 1.0 Author: 吳叫獸 */ #ifndef _PARKING_H #define _PARKING_H #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define NONE "\e[0m" #define BLACK "\e[0;30m" #define L_BLACK "\e[1;30m" #define RED "\e[0;31m" #define L_RED "\e[1;31m" #define GREEN "\e[0;32m" #define L_GREEN "\e[1;32m" #define BROWN "\e[0;33m" #define YELLOW "\e[1;33m" #define BLUE "\e[0;34m" #define L_BLUE "\e[1;34m" #define PURPLE "\e[0;35m" #define L_PURPLE "\e[1;35m" #define CYAN "\e[0;36m" #define L_CYAN "\e[1;36m" #define GRAY "\e[0;37m" #define WHITE "\e[1;37m" #define SUCCESS 10000 #define FAILURE 10001 #define TRUE 10002 #define FALSE 10003 #define SIZE 3 //棧的容量 struct num { long time1; long time2; char *timer[SIZE]; char a[20]; }; typedef struct num Car; struct stack { int top; //棧頂元素的位置(棧頂指標) Car *data; //各輛車的資訊 /*char *a[SIZE]; int in[SIZE]; int out[SIZE];*/ }; typedef struct stack Stack; struct queue { Car data[SIZE]; int front; //隊頭指標(下標) int rear; //隊尾指標 }; typedef struct queue Queue; struct all { long time; char *timer_in[50]; char *timer_out[50]; char a[20]; }; typedef struct all A; struct allstack { int top; A *data; }; typedef struct allstack New; int StackInit(Stack **s); void push(Stack *s, Queue *q); void traverse(Stack *s); void outcar(Stack *s1, Stack *s2, Queue *q, New *n); int pop(Stack *s); void seekqueue(Queue q); int InitQueue(Queue *q); int EnterQueue(Queue *q, char str[20]); void welcome(); void menu(); void seekstack(Stack *s); void traverseNew(New *n, Stack *s); int Allstackinit(New **s); int StackClear(Stack *s); int StackDestroy(Stack **s); int DeleteQueue(Queue *q); int ClearQueue(Queue *q); #endif
功能子函式:
/****************************wddv587************************************* FileName: 停車場/parking.c Verson: 1.0 Date: 2018.0814 Description: 停車場程式功能函式,實現不同功能。 Verson: 1.0 Author: 吳叫獸 */ #include "parking.h" int StackInit(Stack **s) //對棧初始化 { int i; (*s) = (Stack *)malloc(sizeof(Stack) * 1); //分配一個結構體,用於儲存棧的資訊 //判斷是否申請空間成功 if(NULL == (*s)) { printf("申請空間失敗!\n"); sleep(2); return FAILURE; } (*s)->top = -1; //空棧,棧頂為-1 (*s)->data = (Car *)malloc(sizeof(Car) * SIZE); //為棧分配空間 //判斷是否申請空間成功 if (NULL == (*s)->data) { printf("申請空間失敗!\n"); sleep(2); return FAILURE; } for(i = 0; i < SIZE; i++) { (*s)->data[i].timer[i] = malloc(sizeof(char) * 64);//為存放車牌號的字元指標陣列分配空間 //判斷是否申請空間成功 if((*s)->data[i].timer[i] == NULL) { printf("申請空間失敗!\n"); sleep(1); return FAILURE; } } return SUCCESS; } int Allstackinit(New **s) //用於對存放從停車場離開的車輛資訊的棧初始化 { int i; (*s) = (New *)malloc(sizeof(New) * 1); //判斷是否申請空間成功 if(NULL == (*s)) { printf("申請空間失敗!\n"); sleep(1); return FAILURE; } (*s)->top = -1; //空棧,棧頂為-1 (*s)->data = (A *)malloc(sizeof(A) * 20); //判斷是否申請空間成功 if (NULL == (*s)->data) { printf("申請空間失敗!\n"); sleep(1); return FAILURE; } for(i = 0; i < 50; i++) { (*s)->data[i].timer_in[i] = malloc(sizeof(char) * 64); (*s)->data[i].timer_out[i] = malloc(sizeof(char) * 64); //判斷是否申請空間成功,這裡任何一個申請失敗都是返回錯誤 if((*s)->data[i].timer_in[i] == NULL || (*s)->data[i].timer_out[i] == NULL) { printf("申請空間失敗!\n"); sleep(1); return FAILURE; } } return SUCCESS; } void push(Stack *s, Queue *q) //該函式是對進入停車場的車輛操作 { time_t t; char str[20] = {0}; if (NULL == s || q == NULL) //入參判斷 { printf("程式執行出錯!\n"); return; } char flag = 'y'; //flag的作用是重複進車 while(flag == 'y') { printf("請輸入您的車牌號:\n"); scanf("%s", str); if(s->top == SIZE - 1) //判斷停車場是否已滿 { printf("停車場已滿!即將進入等候區。。。\n"); sleep(1); /*xxxxxxxxx*/ EnterQueue(q, str); //若是滿了的話,就進去等候佇列 return; } strcpy(s->data[s->top + 1].a, str); //停車場沒有滿,正常進棧 t = time(NULL); s->data[s->top + 1].time1 = time(&t); strcpy(s->data[s->top + 1].timer[s->top + 1], ctime(&t)); printf("車 牌:%s\n停車時間:%s\n", str, s->data[s->top + 1].timer[s->top + 1]); s->top++; printf("您還有車嗎,是否繼續入庫, y or n ?\n"); getchar(); scanf("%c", &flag); } } void traverse(Stack *s) //通過下標副本實現對停車場棧的遍歷(棧是沒有遍歷的,只能一個一個出一個一個讀取) { if(NULL == s) //入參判斷 { printf("程式執行出錯!\n"); return; } if(s->top == -1) //判斷停車場是否為空 { printf("停車場是空的!\n"); return; } int lp = -1; printf("停車場內資訊如下:\n"); time_t t; long tmp, tmp1; tmp = time(&t); while(lp != s->top) //這裡定義一個時間變數,可以求出目前挺溜的時間 { lp++; tmp1 = tmp - s->data[lp].time1; printf("車 牌 號:%s\n", s->data[lp].a); printf("停車時間:%s\n", s->data[lp].timer[lp]); printf("已 停 留:%d\n", tmp1); } sleep(1); } void outcar(Stack *s1, Stack *s2, Queue *q, New *n) //這個函式是最長的,不過應該還能看懂 { if(NULL == s1 || NULL == s2)//入參判斷 { printf("run error !\n"); sleep(1); return; } if(s1->top == -1) //判斷停車場是否為空,若為空則不用出車 { printf("empty!\n"); sleep(1); return; } char str[20] = {0}; printf("請選擇你要賣掉的車的車牌號:\n"); scanf("%s", str); while(strcmp(s1->data[s1->top].a, str) != 0) //該步驟是從stack1頂端元素開始判斷,車輛是否是想要出去的那輛,若不是,則出棧,進入stack2裡 { strcpy(s2->data[s2->top + 1].a, s1->data[s1->top].a); //進棧stack2 s2->top++; pop(s1); if(s1->top == -1) { printf("停車場內沒有這輛車!\n"); sleep(2); return; } } //下面進行的就是將出去的車輛資訊儲存在第四個棧裡面 long tmp_time; time_t t; s1->data[s1->top].time2 = time(&t); strcpy(n->data[n->top + 1].timer_in[n->top + 1], s1->data[s1->top].timer[s1->top]);//進車時間 strcpy(n->data[n->top + 1].a, str);//車牌號寫入第四個棧 strcpy(s1->data[s1->top].timer[s1->top], ctime(&t));//車輛離開時間覆蓋寫入stack1 strcpy(n->data[n->top + 1].timer_out[n->top + 1], ctime(&t));//車輛離開時間寫入第四個棧 tmp_time = s1->data[s1->top].time2 - s1->data[s1->top].time1;//計算這輛車停放的時間 n->data[n->top + 1].time = tmp_time;//把停留時間也寫入第四個棧裡 n->top++; printf("車 牌:%s\n出車時間:%s\n停留時間:%d\n", s1->data[s1->top].a, s1->data[s1->top].timer[s1->top], tmp_time); pop(s1); sleep(1); while(s2->top != -1) //把讓路棧全部寫入stack1 { strcpy(s1->data[s1->top + 1].a, s2->data[s2->top].a); s1->top++; s2->top--; } if(q->front != q->rear)//此時若等候區有車,則預設將第一輛車進入stack1 { printf("停車場內已有位置,等候區第一輛車即將進入停車場。。。\n"); strcpy(s1->data[s1->top + 1].a, q->data[q->front].a); time_t t; s1->data[s1->top + 1].time1 = time(&t); strcpy(s1->data[s1->top + 1].timer[s1->top + 1], ctime(&t)); printf("車 牌:%s\n停車時間:%s\n", s1->data[s1->top + 1].a, s1->data[s1->top + 1].timer[s1->top + 1]); s1->top++; q->front = (q->front + 1) % SIZE; sleep(1); } } void traverseNew(New *n, Stack *s) //遍歷第四個棧 { if(NULL == n || NULL == s) { printf("run error!\n"); sleep(1); return; } if(n->top == -1) { printf("目前沒有車出過停車場!\n"); } else { int lp = -1; printf("之前來過的車輛資訊如下:\n"); while(lp != n->top) { lp++; printf("車 牌 號:%s\n", n->data[lp].a); printf("停車時間:%s\n", n->data[lp].timer_in[lp]); printf("出車時間:%s\n", n->data[lp].timer_out[lp]); } } printf("目前停車場內車輛資訊如下:\n"); if(s->top == -1) { printf("停車場是空的!\n"); } else { int lpp = -1; printf("停車場內資訊如下:\n"); time_t t; long tmp, tmp1; tmp = time(&t); while(lpp != s->top) { lpp++; tmp1 = tmp - s->data[lpp].time1; printf("車 牌 號:%s\n", s->data[lpp].a); printf("停車時間:%s\n", s->data[lpp].timer[lpp]); printf("已 停 留:%d\n", tmp1); } } sleep(3); } void seekstack(Stack *s) { if (NULL == s) //入參判斷 { printf("程式執行出錯!\n"); return; } int lp = s->top; char str[20]; printf("請輸入想要查詢的車牌號:\n"); scanf("%s", str); while(lp != -1) { if(strcmp(s->data[lp].a, str) == 0) { time_t t; long tmp; tmp = time(&t) - s->data[lp].time1; printf("車 牌 號:%s\n", s->data[lp].a); printf("停車時間:%s\n", s->data[lp].timer[lp]); printf("停留時間:%d\n", tmp); sleep(2); break; } lp--; } if(lp == -1) { printf("停車場內沒有這輛車!\n"); sleep(1); } } int pop(Stack *s) { if (s->top == -1) { return FAILURE; } s->top--; return SUCCESS; } void seekqueue(Queue q) { if (q.rear == q.front) { printf("queue is empty!\n"); sleep(2); return; } printf("等候區資訊如下:\n"); while(q.front != q.rear) { printf("%s\n", q.data[q.front].a); q.front = (q.front + 1) % SIZE; } sleep(3); } int StackClear(Stack *s) { if (NULL == s) { return FAILURE; } s->top = -1; return SUCCESS; } int StackDestroy(Stack **s) { if (s == NULL || *s == NULL) { return FAILURE; } free((*s)->data); free(*s); (*s) = NULL; return SUCCESS; } //佇列功能子函式 int InitQueue(Queue *q) { if (NULL == q) { return FAILURE; } q->rear = q->front = 0; //初始化空隊 return SUCCESS; } int EnterQueue(Queue *q, char str[20]) { if (NULL == q) { return FAILURE; } if ((q->rear + 1) % SIZE == q->front) //隊滿 { printf("等候區已滿!請去秦鵬的停車場。。。\n"); sleep(2); return FAILURE; } strcpy(q->data[q->rear].a, str); q->rear = (q->rear + 1) % SIZE; return SUCCESS; } int DeleteQueue(Queue *q) { if (NULL == q) { return FAILURE; } if (q->rear == q->front) { return FAILURE; } q->front = (q->front + 1) % SIZE; return SUCCESS; } int ClearQueue(Queue *q) { if (NULL == q) { return FAILURE; } q->front = q->rear; return SUCCESS; } //炫酷的進入介面 void welcome() { system("clear"); printf(YELLOW"wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 \n"NONE); printf("\n\n\n\n\n\n\n\n\n"); printf(L_PURPLE" 接\n"NONE); printf(L_BLACK" 下\n"NONE); printf(L_BLUE" 來\n"NONE); printf(L_GREEN" 你\n"NONE); printf(L_CYAN" 所\n"NONE); printf(PURPLE" 見\n"NONE); printf(YELLOW" 的\n"NONE); printf(BLUE" 是\n"NONE); printf("\n\n\n\n\n\n"); printf(YELLOW"wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 \n"NONE); sleep(3); system("clear"); printf(YELLOW"wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 \n"NONE); printf("\n\n\n\n\n\n\n\n\n"); printf(L_PURPLE" \n"NONE); printf("\033[41;32m 吳叫獸的停車場!\033[0m\n"); printf("\033[31;5m 吳叫獸的停車場!\033[0m\n"); printf("\033[41;32m 吳叫獸的停車場!\033[0m\n"); printf("\n\n\n\n\n\n\n\n\n\n"); printf(YELLOW"wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 wddv587 \n"NONE); sleep(3); system("clear"); printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE); printf(L_BLUE"**________**________**_______**____\n"NONE); printf(L_PURPLE"\n 歡迎來到吳叫獸的停車場!\n"NONE); printf(L_BLUE"**________**________**_______**____\n"NONE); printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE); sleep(1); } void menu() { system("clear"); printf(GREEN"\n\n\
[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n"NONE); printf(BLUE" 1、停車登記 2、出車登記\n"NONE); printf(PURPLE" 3、查詢車輛資訊 4、查詢出入記錄\n"NONE); printf(L_GREEN" 5、查詢場內車輛資訊 6、查詢等候車輛資訊\n"NONE); printf(L_BLUE" 7、退出系統\n"NONE); printf(GREEN"\n******************************************************************\n\n\n"NONE); }
主函式:
/****************************wddv587*************************************
FileName: 停車場/car.c Verson: 1.0 Date: 2018.0814
Description: 停車場程式主函式,使用者可以選擇相應的功能
Verson: 1.0
Author: 吳叫獸
*/
#include <stdio.h>
#include "parking.h"
int main()
{
int ret, i, choice;
//定義兩個棧,stack1是停車棧,stack2是讓路棧
Stack *stack1, *stack2;
ret = StackInit(&stack1); //stack是野指標,要修改stack的值(地址)
if (ret == SUCCESS)
{
printf("Init Sequence Stack1 Success!\n");
}
else
{
printf("Faliure!\n");
exit(0);
}
ret = StackInit(&stack2);//同理
if (ret == SUCCESS)
{
printf("Init Sequence Stack1 Success!\n");
}
else
{
printf("Faliure!\n");
exit(0);
}
Queue queue; //定義一個車輛等候佇列,先到先出,進入停車場
ret = InitQueue(&queue);//同理
if (ret == SUCCESS)
{
printf("Init Success!\n");
}
else
{
printf("Init Failure!\n");
exit(0);
}
New *new;
ret = Allstackinit(&new);//這邊定義的是另外一個棧,它的功能是存放從停車場出來的車輛資訊
if (ret == SUCCESS)
{
printf("Init Success!\n");
}
else
{
printf("Init Failure!\n");
exit(0);
}
system("clear");
printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
printf(L_BLUE"**________**________**_______**____\n"NONE);
printf(L_PURPLE"\n初始化成功!即將進入系統服務。。。\n"NONE);
printf(L_BLUE"**________**________**_______**____\n"NONE);
printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
sleep(1);
welcome();
while(1)
{
menu();
printf("請輸入功能選項:\n");
printf("Please input:\n");
scanf("%d", &choice);
switch(choice)
{
case 1:
push(stack1, &queue);
break;
case 2:
outcar(stack1, stack2, &queue, new);
break;
case 3:
seekstack(stack1);
break;
case 4:
traverseNew(new, stack1);
break;
case 5:
traverse(stack1);
break;
case 6:
seekqueue(queue);
break;
case 7:
StackClear(stack1);
StackClear(stack1);
StackDestroy(&stack1);
StackDestroy(&stack2);
printf("龍捲風摧毀停車場!\n");
DeleteQueue(&queue);
ClearQueue(&queue);
printf("老闆有錢啊,這麼多車,下次還來呀! bye bye ~~\n");
sleep(1);
system("clear");
float y;
float x;
float z;
float f;
for ( y = 1.5f; y > -1.5f; y -= 0.1f)
{
for ( x = -1.5f; x < 1.5f; x += 0.05f)
{
z = x * x + y * y - 1;
f = z * z * z - x * x * y * y * y;
putchar(f <= 0.0f ? ".:-=+*#%@"[(int)(f * -8.0f)] : ' ');
}
putchar('\n');
}
sleep(1);
exit(0);
}
}
return 0;
}
相關推薦
Linux小專案:停車場的實現。
標頭檔案: /****************************wddv587************************************* FileName: 停車場/parking.h Verson: 1.0 Date: 2018.0814
【嵌入式系統學習記錄】小專案:停車場管理系統的體會
停車場專案需求問題描述:停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先後次序停放。若車場滿了,車要停在門 外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中的車離開時,由於通道窄,在它後面的車 要先退出,待它走後在依次進入。汽
小專案:基於Struts框架的員工管理系統的java實現
1.匯入struts包 c3p0-0.9.1.2.jar commons-beanutils-1.8.3.jar commons-dbutils-1.6.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commo
LinuxC練習:停車場專案:停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先後次序停放。若車場滿了,車要停在門 外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中
基本功能要求: (1)建立三個資料結構分別是:停放棧、讓路棧、等候佇列。 (2)輸入資料模擬管理過程,資料(入或出,車號)功能描述:進車登記、出車登記、按車牌號查詢停車車輛資訊、查詢出入車記錄、 查詢場內車輛資訊、查詢等候
微信小程式:Animation實現圖片旋轉動畫
最近小程式中有一個圖片旋轉的需求,最初是想著通過切換多張圖片達到旋轉的效果,後來發現微信小程式帶有動畫api,然後就改由image+Animation來實現。 ###首先在wxml中定義image <image class="bth_image2" mode="aspec
Tkinter小專案:用Python寫一個地址收藏管理工具,迅速提高你的工作效率
如何管理雜亂的電腦桌面和一大堆的瀏覽器收藏網址?我用python寫了一個工具,迅速提高工作效率。 工作了一段時間發現,電腦桌面上已經滿屏的常用軟體、常用專案資料夾的快捷方式,一大堆的常用文件,瀏覽器上收藏的工作網址更是有100+,通常想開啟一個文件、網址要尋找半
Flask速成專案:Flask實現計算機資源的實時監控
很多人都說使用Python開發WEB應用非常方便,那麼對於WEB新手來說,到底有多方便呢?本文即將展示給你Python的魔法。 本文將通過一個例項:Flask實現計算機資源的實時監控,迅速帶你入門F
小專案:httpserver + WebFrame(網頁框架)
httpserver V3.0 第三版!!! httpserver + WebFrame(網頁框架) # coding = utf-8 ''' httpserver V3.0 第三版!!! httpserver + WebFrame(網頁框架) ''' fro
Python爬蟲練手小專案:爬取窮遊網酒店資訊
Python爬蟲練手小專案:爬取窮遊網酒店資訊 Python學習資料或者需要程式碼、視訊加Python學習群:960410445 前言 對於初學者而言,案例主要的是為了讓大家練手,明白其中如何這樣寫的思路,而不是拿著程式碼執行就完事了。 基本環境配置 系統
實用小專案——Vue.js 實現增刪查改功能
最近學習了vue.js框架,嘗試著做了一個增刪查改功能的小專案。 今天發博來跟大家交流交流經驗。整體效果如下動態圖: 首先,我使用的是Bootstrap搭建整體框架: <!DOCTYPE html> <html> <head&g
c語言課程結束小專案:2048小遊戲
《C語言程式設計基礎》學習完畢,完成第一個專案:2048小遊戲。 //思考:程式設計時,要先想整個框架還是先想每個函式的演算法。 //思考:每一個函式要不要傳引數(即陣列) //思考:每一個函式之間的聯絡是什麼,誰呼叫誰…這裡很容易搞得頭暈,越想越覺得複雜,便不想完成專案了。 &nb
Python小專案:快速開發出一個簡單的學生管理系統
本文根據實際專案中的一部分api 設計抽象出來,例項化成一個簡單小例子,暫且叫作「學生管理系統」。 這個系統主要完成下面增刪改查的功能: 包括: 學校資訊的管理 教師資訊的管理 學生資訊的管理 根據Api請求的動作:
ASP.NET Core + Vue 小專案:構造自己的線上 Markdown 筆記本應用
ASP.NET Core + Vue 小專案:構造自己的線上 Markdown 筆記本應用 目錄 概要 知識點 完整示例圖 程式碼與資原始檔 流程步驟 概要 基於 MVP
Linux小專案-群聊系統
專案名稱:chat_room群聊系統 背景知識與主要技術: 熟悉Linux基本指令的使用(ls,cd,make,mkdir,top,basename,pwd,cp,mv,rm,touch) 熟悉linux開發環境,熟練使用vi/vim ,gcc/g++,g
小專案:大數的基本運算
大數運算 開發環境:Visual Studio 2015 主要技術:string,C++類 專案描述: 1.對於計算機不能進行計算的大資料進行處理,讓計算機實現大資料的讀入、輸出和基本運算; 2.使
個人小專案:現有12個小球和一個天平,小球中有一個重量與其它的不同,稱重幾次能將這個小球找出來
<script language="JavaScript"> //建立兩個陣列,分別存放左邊盤小球物件和右邊盤小球物件 var leftbar = new Array(); var rightbar = new Array(); //建立一個整形變數,存放當前稱重的次數
Android小專案:計算器
專案原始碼在文章最後。 這兩天寫了一個Android的計算器,現在整理一下思路與程式碼。 首先是功能需求分析: 1、數字我規定最長為九位,如果有小數點則加上小數點最長為十位 2、第二個引數輸入時不允許為負數,但是先得出的結果為負數,可以再進行運算(比如:1-2=-1,結果
Python 小技巧:如何實現作業系統相容性打包?
有一個這樣的問題:現要用 setuptools 把一個專案打包成 whl 檔案,然後 pip install 在 Windows/Linux 兩種作業系統上,但是該專案中有一些依賴庫只有 Windows 上才有(例如 pywinauto、pywingui、pywinrm),那麼問題是,如何實現打包檔案的可相容
Linux(小專案)————shell的實現,包含重定向、內建命令。
bash原理: 通過上面bash的原理我們可以,瞭解到shell的框架與流程: 1.等待使用者輸入命令。 2.解析使用者輸入的字串。 3.建立子程序執行exec程式替換 4.父程序等待子程序退出。 迴圈執行1~4步驟,即可完成my_shell。 最簡單版本的my_shell實現:
小練習:用socket實現Linux和Windows之間的通信
ren argc 漏洞 markdown tex sockets acc sas -m 在日常生活中,絕大部分人使用的機器通常是windows系統,可是對於研發人員,開發、編譯等工作往往是建立在linux機器上。其實。在服務器方面,Linux、UNIX和