C에서 scanf () 및 printf () 대신 read () 및 write () 사용

Falhumai

내가 사용하고자하는 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
��>

나는 무슨 일이 일어나고 있는지 모른다. 특수 문자가 나타나는 이유와 마찬가지로 새 입력에 마지막 입력의 일부가 있습니다. 도움이 필요합니다.

chqrlie

의 반환 값을 저장하고 완료 read되었는지 확인 read하고 null로 문자열을 전달하기 전에 문자열을 종료해야합니다 strcpy. read실제로 신호에 의해 중단 될 수 있으며이 경우 다시 시작해야합니다. read또한 부분 라인을 반환 할 수 있습니다 '\n'. 문자의 파일 끝을 수신 할 때까지 필요한 경우 버퍼를 신중하게 재 할당하면서 명령 버퍼를 계속 읽고 연결해야합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

scanf 및 printf에서 % 사용

분류에서Dev

C ++에서 scanf () 및 printf ()를 사용하는 예기치 않은 출력

분류에서Dev

dispatch_write () 및 dispatch_read () 사용법

분류에서Dev

printf / scanf 사용 및 <iostream> 및 cout / cin 차이와의 차이점, 언제 사용합니까?

분류에서Dev

C #에서 switch 문 대신 enum 및 struct 사용

분류에서Dev

"printf"및 "scanf", 스트림에 문제가 있습니다.

분류에서Dev

이상한 printf 및 scanf 동작

분류에서Dev

두 번째 문자열 입력에 대해 Printf 및 Scanf가 제대로 작동하지 않음

분류에서Dev

콘솔 I / O : 예상 된 순서대로 printf 및 scanf가 발생하지 않음

분류에서Dev

int 및 double 대신 short 및 long 사용 (C ++)

분류에서Dev

Posix Semaphore에서 공유 메모리 사용 C에서 대기 및 신호

분류에서Dev

getchar 및 scanf에 대해 혼동

분류에서Dev

루프에서 함께 printf 및 fget 사용

분류에서Dev

scanf () 및 printf ()를 사용하는 동안 else 문이 실행되지 않는 이유는 무엇입니까?

분류에서Dev

mprotect를 사용한 PROT_READ 및 PROT_WRITE의 동작

분류에서Dev

C에서 const 버퍼 및 read () 사용 이해

분류에서Dev

JXTable : 전체 열 대신 특정 셀에 TableCellEditor 및 TableCellRenderer 사용

분류에서Dev

JXTable : 전체 열 대신 특정 셀에 TableCellEditor 및 TableCellRenderer 사용

분류에서Dev

C : printf ()를 사용한 데이터 유형 및 캐스팅

분류에서Dev

ScrollView 및 ForEach 대신 목록 사용

분류에서Dev

cublasSetMatrix 및 cublasSetVector 대신 cudaMemCpy 사용

분류에서Dev

c에서 '?? =', '?? <'및 '??>'사용

분류에서Dev

Promela 및 SPIN을 사용한 printf 출력?

분류에서Dev

포인터를 사용하여 scanf에서 주 함수 C로 char 및 float 값 반환

분류에서Dev

C # asp.net에서 HTTP Post JSON 수신 및 사용

분류에서Dev

수신 및 발신 DTO들에 대한 모범 사례

분류에서Dev

printf 및 ASCII의 C ++ 문제

분류에서Dev

일부 CLI에서 ‛및 '대신`및'를 사용하는 이유는 무엇입니까?

분류에서Dev

왜 항상 사용해야하나요 || 대신 | 및 & 대신 &&?

Related 관련 기사

  1. 1

    scanf 및 printf에서 % 사용

  2. 2

    C ++에서 scanf () 및 printf ()를 사용하는 예기치 않은 출력

  3. 3

    dispatch_write () 및 dispatch_read () 사용법

  4. 4

    printf / scanf 사용 및 <iostream> 및 cout / cin 차이와의 차이점, 언제 사용합니까?

  5. 5

    C #에서 switch 문 대신 enum 및 struct 사용

  6. 6

    "printf"및 "scanf", 스트림에 문제가 있습니다.

  7. 7

    이상한 printf 및 scanf 동작

  8. 8

    두 번째 문자열 입력에 대해 Printf 및 Scanf가 제대로 작동하지 않음

  9. 9

    콘솔 I / O : 예상 된 순서대로 printf 및 scanf가 발생하지 않음

  10. 10

    int 및 double 대신 short 및 long 사용 (C ++)

  11. 11

    Posix Semaphore에서 공유 메모리 사용 C에서 대기 및 신호

  12. 12

    getchar 및 scanf에 대해 혼동

  13. 13

    루프에서 함께 printf 및 fget 사용

  14. 14

    scanf () 및 printf ()를 사용하는 동안 else 문이 실행되지 않는 이유는 무엇입니까?

  15. 15

    mprotect를 사용한 PROT_READ 및 PROT_WRITE의 동작

  16. 16

    C에서 const 버퍼 및 read () 사용 이해

  17. 17

    JXTable : 전체 열 대신 특정 셀에 TableCellEditor 및 TableCellRenderer 사용

  18. 18

    JXTable : 전체 열 대신 특정 셀에 TableCellEditor 및 TableCellRenderer 사용

  19. 19

    C : printf ()를 사용한 데이터 유형 및 캐스팅

  20. 20

    ScrollView 및 ForEach 대신 목록 사용

  21. 21

    cublasSetMatrix 및 cublasSetVector 대신 cudaMemCpy 사용

  22. 22

    c에서 '?? =', '?? <'및 '??>'사용

  23. 23

    Promela 및 SPIN을 사용한 printf 출력?

  24. 24

    포인터를 사용하여 scanf에서 주 함수 C로 char 및 float 값 반환

  25. 25

    C # asp.net에서 HTTP Post JSON 수신 및 사용

  26. 26

    수신 및 발신 DTO들에 대한 모범 사례

  27. 27

    printf 및 ASCII의 C ++ 문제

  28. 28

    일부 CLI에서 ‛및 '대신`및'를 사용하는 이유는 무엇입니까?

  29. 29

    왜 항상 사용해야하나요 || 대신 | 및 & 대신 &&?

뜨겁다태그

보관