programing

새 줄이 발견될 때까지 차단하면서 stdin에서 줄을 읽는 방법은?

muds 2023. 11. 2. 22:10
반응형

새 줄이 발견될 때까지 차단하면서 stdin에서 줄을 읽는 방법은?

명령 줄에 있는 stdin에서 임의 길이의 한 줄씩 읽으려고 합니다.GNU 읽기 라인을 포함할 수 있을지 확실하지 않고 라이브러리 기능을 사용하는 것을 선호합니다.

제가 읽은 문서에는 다음과 같이 나와 있습니다.getline효과가 있어야 하지만 제 실험에서는 방해가 되지 않습니다.내 샘플 프로그램:

#include <stdio.h>
int main()
{
    char *line = NULL;
    if (getline(&line, NULL, stdin) == -1) {
        printf("No line\n");
    } else {
        printf("%s\n", line);
    }
    return 0;
}

생산품No line, 따라서 사용자 입력을 수락하기에 적합하지 않습니다.

이거 어떻게 해요?사소한 일이어야 한다는 것을 알지만, 저는 그것을 알아낼 수 없었습니다.

이 패치를 사용해 보십시오.

char *line = NULL;
+size_t size;
+if (getline(&line, &size, stdin) == -1) {
-if (getline(&line, 0, stdin) == -1) {
    printf("No line\n");
} else {

"차단 불가" 동작을 재현할 수 있었습니다.getline:

#include <stdio.h>
#include <stdlib.h>

int main()
{
        char    *buffer;
        size_t  n = 1024;
        buffer = malloc(n);
        return getline(&buffer, &n, stdin);
}

getline(&buffer...토막토막할당할 경우NULL로.buffer, (광고된 대로) 다시 차단하고 새로 할당된 버퍼에 라인을 저장합니다.

하지만 내가 글을 쓴다면,

getline(NULL, &n, stdin);

그리고나서getline실패하고 차단되지 않는 것 같습니다.어쩌면 무효일 수도 있습니다.n아니면 파일 포인터가 같은 동작을 일으킬 수도 있습니다.이것이 문제일까요?

언급URL : https://stackoverflow.com/questions/12252103/how-to-read-a-line-from-stdin-blocking-until-the-newline-is-found

반응형