亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

松江区| 炉霍县| 成武县| 渝北区| 宁阳县| 鹿邑县| 晋州市| 鱼台县| 五峰| 都昌县| 屏东市| 二连浩特市| 马山县| 兴海县| 滦南县| 郑州市| 淮南市| 牡丹江市| 南平市| 泰州市| 岳普湖县| 房产| 涪陵区| 仁化县| 东台市| 循化| 永登县| 大渡口区| 卓尼县| 京山县| 屏东市| 鄄城县| 龙州县| 天津市| 固始县| 游戏| 夏邑县| 米泉市| 繁昌县| 深圳市| 新龙县|