五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

快速用C寫一個(gè)簡(jiǎn)單的Shell

2022-10-29 23:12 作者:fcanlnony  | 我要投稿

前言
??? 之所以會(huì)寫這篇文章,主要是因?yàn)槲蚁氲轿易铋_(kāi)始寫shell來(lái)練手的時(shí)候,查了許多資料,他們的實(shí)現(xiàn)都太復(fù)雜,所以實(shí)現(xiàn)一個(gè)簡(jiǎn)易的shell給需要的人做示例(注:本人還在讀高中,C是自學(xué)的,寫的不好請(qǐng)見(jiàn)諒?。?br>
需了解的函數(shù)
先來(lái)看主要用到的三個(gè)函數(shù),strtok用來(lái)分割字符,readline用來(lái)處理用戶輸入,execvp(execve的變種,自己找PATH去啟動(dòng)程序),提供這些函數(shù)頭文件分別為string.h,
readline.h , unistd.h


extern char *strtok (char *__restrict __s, const char *__restrict __delim)

extern char *readline PARAMS((const char *))

extern int execvp (const char *__file, char *const __argv[])


怎么實(shí)現(xiàn)
??? 聲明一個(gè)char類型的數(shù)組,調(diào)用readline()獲得用戶輸入存儲(chǔ)在該數(shù)組,再調(diào)用strtok()使指針數(shù)組指向該數(shù)組,然后fork出一個(gè)子進(jìn)程,在子進(jìn)程下調(diào)用execvp()函數(shù)

源碼
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <readline/readline.h>
#include <wait.h>
#include <sys/types.h>

char *argv[] = {NULL};

void input_strtok(char *input)
{
??? argv[0] = strtok(input," ");
??? short i = 0;
??? while(argv[i] != NULL)
?? ??? ?argv[++i] = strtok(NULL," ");
}

int exec_cmd(char *argv[])
{
??? pid_t pidN = fork();
??? if(pidN < 0) {
??? fprintf(stderr,"Error in fork");
??? return -1;
??? }
??? else if(pidN == 0) {
??? if(execvp(argv[0],argv) < 0)
??????? fprintf(stderr, "myshell?: command : %s : could not found\n", argv[0]);
??? exit(0);
??? } else {
??? ??? wait(NULL);
??? }
??? return 0;
}

int main()
{
??? char display_readline[13];
??? sprintf(display_readline,"%s","myshell >>> ");
??? while (1) {
?? ?char *input = malloc(sizeof(char)*1024);
??? memset(input,0x00,1024); //初始化數(shù)組
?? ?input = readline(display_readline); //獲得用戶輸入
?? ?if(strcmp(input,"exit") == 0)
?? ???? exit(0);
?? ?input_strtok(input); //分割字符串
?? ?exec_cmd(argv); //fork出一個(gè)子進(jìn)程然后運(yùn)行程序
?? ?free(input);
??? }
}

后記

????雖然代碼經(jīng)過(guò)測(cè)試,但仍有許多不足,懇請(qǐng)大佬們指出

快速用C寫一個(gè)簡(jiǎn)單的Shell的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临泉县| 桐梓县| 荣昌县| 含山县| 邯郸市| 濮阳市| 加查县| 宜良县| 长武县| 青铜峡市| 尼玛县| 喜德县| 崇左市| 曲阜市| 平利县| 自治县| 沅陵县| 阿拉善左旗| 兰坪| 曲水县| 周口市| 文水县| 吉隆县| 松滋市| 高清| 张家界市| 江源县| 安岳县| 安达市| 依安县| 突泉县| 冷水江市| 会理县| 贡觉县| 开阳县| 铁力市| 乌鲁木齐县| 察雅县| 师宗县| 收藏| 杭州市|