国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux編寫簡易shell

這篇具有很好參考價值的文章主要介紹了Linux編寫簡易shell。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

思路:?

?
Linux編寫簡易shell,Linux,linux,算法,運(yùn)維

?

所以要寫一個shell,需要循環(huán)以下過程:?

  1. 獲取命令行
  2. 解析命令行
  3. 建立一個子進(jìn)程(fork)
  4. 替換子進(jìn)程(execvp)
  5. 父進(jìn)程等待子進(jìn)程退出(wait)

實現(xiàn)代碼:?

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
 #define MAX_CMD 1024
 char command[MAX_CMD];
 int do_face()
 {
    memset(command, 0x00, MAX_CMD);
    printf("minishell$ ");
    fflush(stdout);
    if (scanf("%[^\n]%*c", command) == 0) {
        getchar();
        return -1; 
    }   
    return 0;
 }
 char **do_parse(char *buff)
 {
    int argc = 0;
    static char *argv[32];
    char *ptr = buff;
    while(*ptr != '\0') {
        if (!isspace(*ptr)) {
            argv[argc++] = ptr;
            while((!isspace(*ptr)) && (*ptr) != '\0') {
                ptr++;
            }
        }else {
            while(isspace(*ptr)) {
                *ptr = '\0';
                ptr++;
            }
        }
    }
    argv[argc] = NULL;
    return argv;
 }
 int do_exec(char *buff)
 {
    char **argv = {NULL};
	int pid = fork();
	if (pid == 0) {
        argv = do_parse(buff);
        if (argv[0] == NULL) {
            exit(-1);
        }
        execvp(argv[0], argv);
    }else {
        waitpid(pid, NULL, 0);
    }
    return 0;
 }
 int main(int argc, char *argv[])
 {
    while(1) {
        if (do_face() < 0)
            continue;
        do_exec(command);
    }
    return 0;
 }

????????以上就是本文的全部內(nèi)容,如果對你有幫助,歡迎點贊收藏轉(zhuǎn)發(fā)評論!?文章來源地址http://www.zghlxwxcb.cn/news/detail-808560.html

到了這里,關(guān)于Linux編寫簡易shell的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】進(jìn)程程序替換 && 做一個簡易的shell

    【Linux】進(jìn)程程序替換 && 做一個簡易的shell

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 文章目錄 前言 進(jìn)程程序替換 替換原理 先看代碼和現(xiàn)象 替換函數(shù) 第一個execl(): 第二個execv(): 第三個execvp(): 第四個execvpe(): 環(huán)境變量 第五個execlp(): 第六個execle(): 函數(shù)解釋 命名理解 在Make

    2024年04月11日
    瀏覽(11)
  • 【Linux】進(jìn)程控制 — 進(jìn)程程序替換 + 實現(xiàn)簡易shell

    【Linux】進(jìn)程控制 — 進(jìn)程程序替換 + 實現(xiàn)簡易shell

    上一節(jié)我們講了進(jìn)程終止和進(jìn)程等待等一系列問題,并做了相應(yīng)的驗證,本章將繼續(xù)對進(jìn)程控制進(jìn)行學(xué)習(xí),我們將學(xué)習(xí)進(jìn)程程序替換,進(jìn)行相關(guān)驗證,運(yùn)用系統(tǒng)進(jìn)程程序替換接口,自己模擬寫一個shell,該shell能夠?qū)崿F(xiàn)執(zhí)行指令,等一系列命令行操作…… 概念引入: 將可執(zhí)行

    2024年02月06日
    瀏覽(18)
  • Linux shell腳本編寫

    Linux shell腳本編寫

    一、常用shell腳本指令 echo: 輸出指定的文本或變量值到標(biāo)準(zhǔn)輸出。 read: 從標(biāo)準(zhǔn)輸入讀取用戶輸入,并將其保存到指定的變量中。 if: 執(zhí)行條件語句,如果滿足指定條件則執(zhí)行特定操作,否則執(zhí)行其他操作。 for: 循環(huán)執(zhí)行特定操作,每次迭代更新變量值。 while: 循環(huán)執(zhí)行

    2024年02月16日
    瀏覽(30)
  • Linux自定義shell編寫

    Linux自定義shell編寫

    經(jīng)過了創(chuàng)建進(jìn)程,終止進(jìn)程,進(jìn)程等待和進(jìn)程程序替換之后, 我們就可以借助這些知識實現(xiàn)一個簡單的shell命令行解釋器了 溫馨提示: 建議大家自己寫一遍,這些代碼分塊之后每一個函數(shù)都很簡單, 不過實現(xiàn)過程中可能會有各種各樣非常細(xì)枝末節(jié)的地方被我們所忽視 因此可能會發(fā)生

    2024年02月04日
    瀏覽(17)
  • 【Linux】編寫一個 shell 腳本&執(zhí)行

    在Linux中編寫和執(zhí)行腳本相對簡單。下面是一個基本的步驟指南,幫助你創(chuàng)建一個簡單的bash腳本并運(yùn)行它: 1. 創(chuàng)建腳本文件 首先,你需要使用文本編輯器創(chuàng)建一個新的文件。這個文件通常會有 .sh 的擴(kuò)展名,以表明它是一個shell腳本。例如,你可以創(chuàng)建一個名為 myscript.sh 的文

    2024年04月26日
    瀏覽(25)
  • 【Linux】進(jìn)程實踐項目 —— 自主shell編寫

    【Linux】進(jìn)程實踐項目 —— 自主shell編寫

    送給大家一句話: 不管前方的路有多苦,只要走的方向正確,不管多么崎嶇不平,都比站在原地更接近幸福。 —— 宮崎駿《千與千尋》 前幾篇文章,我們學(xué)習(xí)進(jìn)程的相關(guān)知識: 進(jìn)程概念,進(jìn)程替換,進(jìn)程控制 。熟悉了進(jìn)程到底是個什么事情,接下來我們來做一個實踐,來

    2024年04月14日
    瀏覽(26)
  • Linux一學(xué)就會——編寫自己的shell

    Linux一學(xué)就會——編寫自己的shell

    替換原理 替換函數(shù) 其實有幾種以exec開頭的函數(shù),統(tǒng)稱exec函數(shù): 解釋 exec是函數(shù)替換的開頭,后面跟的都是多加的功能: l :list的簡寫,表示參數(shù)采用列表。 p :path的簡寫,就是自動搜索并添加環(huán)境變量??梢允褂铆h(huán)境變量PATH,無需寫全路徑。 v :vector的簡寫,是可以用參數(shù)

    2024年02月03日
    瀏覽(15)
  • Linux之進(jìn)程控制&&進(jìn)程終止&&進(jìn)程等待&&進(jìn)程的程序替換&&替換函數(shù)&&實現(xiàn)簡易shell

    Linux之進(jìn)程控制&&進(jìn)程終止&&進(jìn)程等待&&進(jìn)程的程序替換&&替換函數(shù)&&實現(xiàn)簡易shell

    1.1 fork的使用 我們可以使用man指令來查看一下 子進(jìn)程會復(fù)制父進(jìn)程的PCB,之間代碼共享,數(shù)據(jù)獨(dú)有,擁有各自的進(jìn)程虛擬地址空間。 這里就有一個代碼共享,并且子進(jìn)程是拷貝了父進(jìn)程的PCB,雖然他們各自擁有自己的進(jìn)程虛擬地址空間,數(shù)據(jù)是拷貝過來的,通過頁表映射到

    2024年04月17日
    瀏覽(26)
  • 【Linux運(yùn)維】shell腳本檢查服務(wù)器內(nèi)存和CPU利用率

    在管理服務(wù)器時候?qū)懥艘粋€ shell腳本,在服務(wù)上實現(xiàn)每天凌晨3點查系統(tǒng)的指定文件夾下的容量大小,如果超過10G就要刪除3天前的內(nèi)容,還要時刻查詢內(nèi)存和cpu利用率,如果超過80%就要提示用戶出現(xiàn)過載 將以上代碼保存為一個.sh文件,然后通過crontab在每天凌晨3點運(yùn)行即可:

    2024年02月09日
    瀏覽(33)
  • Linux shell編程學(xué)習(xí)筆記14:編寫和運(yùn)行第一個shell腳本hello world!

    Linux shell編程學(xué)習(xí)筆記14:編寫和運(yùn)行第一個shell腳本hello world!

    ?* 20231020?寫這篇博文斷斷續(xù)續(xù)花了好幾天,為了說明不同shell在執(zhí)行同一腳本文件時的差別,我分別在csdn提供線上Linux環(huán)境 (使用的shell是zsh)和自己的電腦上(使用的shell是bash)做測試。功夫不負(fù)有心人,在其中一些實例中可以體現(xiàn)出zsh和bash的對腳本文件支持的差別,收

    2024年02月07日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包