91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

編寫一個簡易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

龙陵县| 灌云县| 武义县| 太仆寺旗| 四子王旗| 板桥市| 且末县| 镇平县| 洞口县| 敖汉旗| 上蔡县| 柳江县| 兴城市| 和林格尔县| 工布江达县| 什邡市| 若尔盖县| 淮南市| 大邑县| 北海市| 宁武县| 利津县| 昭觉县| 大关县| 嘉禾县| 德格县| 宜黄县| 普陀区| 永丰县| 南京市| 锡林郭勒盟| 金坛市| 和硕县| 彭州市| 抚顺市| 彝良县| 光泽县| 米林县| 定南县| 班戈县| 驻马店市|