中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

編寫一個簡易shell命令行

發布時間:2020-07-20 14:51:17 來源:網絡 閱讀:495 作者:小止1995 欄目:編程語言

用fork()創建子進程后執行的是和父進程相同的程序(但有可能執行不同的代碼分支),子進程往往要調用一種exec函數以執行另一個程序。

進程程序替換:替換數據和代碼,執行不同邏輯,一旦替換之后,父,子進程代碼,數據獨立。

主要是創建進程,讓子進程去執行命令。

編寫一個簡易shell命令行


編寫一個簡易shell命令行

主要有6個調度函數,函數名中p表示傳文件名(靠環境變量來看是否存在PATH),沒p的需把文件路徑傳過來,要執行一個程序必須先找到它.

帶e表示用自定義環境變量,不帶e表示從父進程繼承而來的環境變量。

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
int main(int argc,char* argv[])
{
        pid_t id;
        while(1)
        {
                printf("[lxj/home]$");
                fflush(stdout);
                char cmd_str[1024]={0};
                ssize_t size=read(0,cmd_str,sizeof(cmd_str)-1);
                char cmd[32]={0};
                char* my_argv[32];
                memset(my_argv,0,sizeof(char*)*32);
                int length=strlen(cmd_str)-2;
        //      printf("%s",cmd_str);
                if(size!=-1)
                {
                        int index=0;
                        while (length >= 0)
                       {
                                while (length >= 0&&cmd_str[length]==' ')
                                {
                                        cmd_str[length--] = 0;
                                }
                                while (length >= 0 && cmd_str[length] != ' ')
                                        length--;
                                my_argv[index++]=cmd_str+length+1;
                        }
                        my_argv[index]=NULL;
                        int i=0;
                        index--;
                        for(;i<index;++i,--index)
                        {
                                char*  tmp=my_argv[i];
                                my_argv[i]=my_argv[index];
                                my_argv[index]=tmp;
                        }
                        if(strcmp(argv[0],"cd")==0)
                        {
                                chdir(my_argv[1]);
                                continue;
                        }
                }
                id=fork();
                if(id<0)
                        perror("fork");
                else if(id==0){
                        execvp(my_argv[0],my_argv);
                        exit(1);
                }
                else if(id>0){
                        pid_t waitPid=waitpid(id,NULL,0);

                }
        }
        return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

堆龙德庆县| 伊春市| 洛隆县| 定陶县| 沧州市| 尚志市| 明水县| 分宜县| 无极县| 泾源县| 金坛市| 东乌珠穆沁旗| 门头沟区| 仁布县| 湖南省| 高邑县| 双辽市| 黄山市| 安远县| 资溪县| 曲阜市| 巴南区| 宣汉县| 博湖县| 宜章县| 大悟县| 烟台市| 云和县| 吉木乃县| 宜兰市| 沧源| 绵阳市| 峡江县| 漾濞| 万年县| 报价| 韶关市| 梁河县| 双城市| 阳西县| 泾阳县|