以下のコードは標準入力から取得したコマンドとして子プロセス上でexecするプログラムなのですが、
char *token = strtok(line_in, " "); nargs = 0; args[nargs++] = token; while( token != NULL){ if (token != NULL){ token = strtok(NULL, " "); args[nargs++] = token;
ここの部分で何をしているのかがわかりません(argsが特に…)
教えていただきたいです
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<sys/types.h> #include<sys/wait.h> #define MAX_LINE_IN 1000 #define MAX_ARGS 30 int main(int argc, char *argv[]) { int pid, status; char line_in[MAX_LINE_IN]; char *args[MAX_ARGS]; int nargs; for(;;){ printf("> "); if (fgets(line_in, MAX_LINE_IN, stdin) == NULL) exit(0); line_in[strlen(line_in) - 1] = '\0'; char *token = strtok(line_in, " "); nargs = 0; args[nargs++] = token; while( token != NULL){ if (token != NULL){ token = strtok(NULL, " "); args[nargs++] = token; } } args[nargs] = NULL; if(strcmp(args[0], "exit") == 0) exit(0); pid = fork(); if(pid < 0){ fprintf(stderr, "Error fork %d\n", getpid()); exit(EXIT_FAILURE); } else if(pid == 0){ execvp(args[0], args); printf("Command Not Found.\n"); _exit(1); } else{ wait(&status); } } //exec execvp(args[0], args); return 0; }
strtokの機能が理解できないという質問なのか、strtokの機能は理解できた上での質問か、どちらでしょう?
strtokの機能はうっすら理解しているつもりですが、可能であればstrtokの機能についても教えていただきたいです
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strtok.3.html
を見て、不明点があれば具体的に聞いて下さい。
char *token = strtok(line_in, " ");
この部分では区切りが読み込まれるまでline_inを読み込み、区切りを読み込んだ時点でそれまで読み込んだline_inを返すということでしょうか?
「読み込み」という言葉が変ですが、概ね合ってます。
区切りがあった場所にNUL文字が書き込まれます。
token = strtok(NULL, " ");
ここの部分では何が返されるのでしょうか?
さっきの続きを取得します。strtokを理解しましょう。
区切り文字のあとの文字列から次の区切り文字までの文字列を返すということでしょうか?
"ABC DEF GHI"なら、最初 ABC 次に DEF 次に GHI ですね。
ありがとうございます、理解しました。
ご迷惑をおかけしてすみませんでした
回答1件
あなたの回答
tips
プレビュー