我是C編程語言的新手,我正在嘗試做一個我自己設定的練習。閱讀用戶命令並執行它
我想要做的是能夠讀入用戶寫入然後執行的命令。我還沒有爲此編寫任何代碼,我真的不確定如何去做。
這基本上是什麼,我想要做:
顯示用戶提示(用於用戶輸入的命令例如/ bin中/ LS -al) 讀取並處理所述用戶輸入
我我目前正在使用MINIX來嘗試創建並更改操作系統。
感謝
我是C編程語言的新手,我正在嘗試做一個我自己設定的練習。閱讀用戶命令並執行它
我想要做的是能夠讀入用戶寫入然後執行的命令。我還沒有爲此編寫任何代碼,我真的不確定如何去做。
這基本上是什麼,我想要做:
顯示用戶提示(用於用戶輸入的命令例如/ bin中/ LS -al) 讀取並處理所述用戶輸入
我我目前正在使用MINIX來嘗試創建並更改操作系統。
感謝
我會給你一個方向:
利用獲取到讀取一行:http://www.cplusplus.com/reference/cstdio/gets/
你可以用printf的顯示
和使用系統執行呼叫:http://www.tutorialspoint.com/c_standard_library/c_function_system.htm
讀一點關於這個功能讓你自己熟悉它們。
謝謝。我想使用getline來讀取程序中的行,以便它可以被執行。 – user3411748 2014-11-04 15:52:28
Shell在新進程中執行命令。這就是它是如何工作的一般:
while(1) {
// print shell prompt
printf("%s", "@> ");
// read user command - you can use scanf, fgets or whatever you want
fgets(buffer, 80, stdin);
// create a new process - the command is executed in the new child process
pid = fork();
if (pid == 0) {
// child process
// parse buffer and execute the command using execve
execv(...);
} else if (pid > 0) {
// parent process
// wait until child has finished
} else {
// error
}
}
我將如何使用getline函數的這個過程?我是否會將fgets改爲getline? – user3411748 2014-11-04 15:48:40
是的,你可以使用'getline'而不是'fgets'。 – 2014-11-04 15:52:28
這是我的代碼至今:
int main(void) {
char *line = NULL;
size_t linecap = 0;
ssize_t linelen;
while ((linelen = getline(&line, &linecap, stdin)) > 0){
printf("%s\n", line);
}
}
這顯然會繼續執行,並打印出一條線直到我按下CTRL-D。我會用什麼樣的代碼來執行用戶輸入的命令?
請指定您的問題併發布您已經嘗試過的內容。聽起來你想爲MINIX開發一個shell?所以你需要printf,scanf,fork和execve。 – 2014-11-04 15:18:34
是的,我確實想爲MINIX開發一個shell。我想嘗試使用其中一個函數:getline,getdelim和strtok。我目前還沒有嘗試過任何操作,因爲我不確定如何操作 – user3411748 2014-11-04 15:25:17
我只是想從某種指南開始,以及如何從getline函數開始 – user3411748 2014-11-04 15:32:59