반응형
새 줄이 발견될 때까지 차단하면서 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
반응형
'programing' 카테고리의 다른 글
WooCommerce - 주문 ID에서 구독 ID 가져오기 (0) | 2023.11.02 |
---|---|
C에서 지정된 이니셜라이저는 무엇입니까? (0) | 2023.11.02 |
오래된 도커 컨테이너를 제거하는 방법 (0) | 2023.11.02 |
iOS 8에서 팝업을 올바르게 표시하는 방법 (0) | 2023.11.02 |
오류: "삽입할 노드가 다른 문서 컨텍스트에 있습니다." (0) | 2023.11.02 |