내가 사용하고자하는 read()
과 write()
에서 읽는 대신 원래의 콘솔에 작성하는 방법 scanf()
과 printf()
최초의 것들로는, 시스템 호출 신호를 사용하여 지원이있다.
명령을 수행 할 때 자식으로 분기되는 미니 Unix 쉘을 만들어야합니다. 다음은 읽기와 쓰기를 테스트하기위한 나의 초기 시도입니다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define COMMAND_LENGTH 1024
#define NUM_TOKENS (COMMAND_LENGTH / 2 + 1)
void read_command(char *buff, char *tokens[], _Bool *in_background) {
// to be implemented later
}
void createStr(char **str) {
if (*str != NULL) {
free(*str);
*str = NULL;
}
*str = (char*)malloc(sizeof(char) * COMMAND_LENGTH);
}
void delStr(char** str) {
if (*str != NULL) {
free(*str);
*str = NULL;
}
}
int main(int argc, char *argv[]) {
char input_buffer[COMMAND_LENGTH];
char *tokens[NUM_TOKENS];
char *inp = NULL;
while (true) {
write(STDOUT_FILENO, "> ", strlen("> "));
createStr(&inp);
read(STDIN_FILENO, input_buffer, sizeof(char) * COMMAND_LENGTH);
strcpy(inp, input_buffer);
write(STDOUT_FILENO, inp, strlen(inp));
_Bool in_background = false;
read_command(inp, tokens, &in_background);
}
delStr(&inp);
return 0;
}
샘플 입력에 대한 출력이 원하는 것이 아닙니다. 다음은 샘플 출력입니다.
> Peterson
Peterson
��> Makr
Makr
son
��> Mark
Mark
son
��> Jon
Jon
son
��>
나는 무슨 일이 일어나고 있는지 모른다. 특수 문자가 나타나는 이유와 마찬가지로 새 입력에 마지막 입력의 일부가 있습니다. 도움이 필요합니다.
의 반환 값을 저장하고 완료 read
되었는지 확인 read
하고 null로 문자열을 전달하기 전에 문자열을 종료해야합니다 strcpy
. read
실제로 신호에 의해 중단 될 수 있으며이 경우 다시 시작해야합니다. read
또한 부분 라인을 반환 할 수 있습니다 '\n'
. 문자의 파일 끝을 수신 할 때까지 필요한 경우 버퍼를 신중하게 재 할당하면서 명령 버퍼를 계속 읽고 연결해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다