GNU Readline을 처음 사용하기 때문에 readline()
요청을 취소 할 수있는 기능이 있는지 알고 싶습니다.GNU Readline : readline 입력 요청을 취소하는 함수가 있습니까?
2
A
답변
5
이렇게하려면 readline에 alternate (또는 "콜백") 인터페이스를 사용해야합니다. 실제로 아무 것도 취소 할 필요가 없습니다. 수행해야 할 모든 작업을 수행하려면 rl_callback_read_char
주위의 루프에서 단계적으로 빠져 나와야합니다. 심지어 전에 사용자가 보낸 있지만 키를 후 경우에만 보낼 수 있습니다. 당신이 키도 누르지 않고이 "취소"하려면
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
void line_handler(char *line) { /* This function (callback) gets called by readline
whenever rl_callback_read_char sees an ENTER */
printf("%s? Hah!!\n", line);
}
int main() {
rl_callback_handler_install("Ask a question: ", &line_handler);
while (1) {
rl_callback_read_char();
if (strstr(rl_line_buffer, "you")) { /* They're asking about *me* =:-0 */
printf("\nNo personal questions please! Goodbye!\n");
break;
/* or make a snarky remark and continue */
}
}
}
, 당신은 (예를 들어, alarm()
을 설정하여) 신호를 사용하여 rl_callback_read_char()
내부의 read()
콜을 중단해야합니다. 그러나 readline은 installs its own signal handlers입니다.
약간 더 복잡한 방법은 루프에 삽입하는 것 두 select()
에 파일 디스크립터, 및 예컨대 stdin
파이프합니다 (self-pipe trick)는`readline에 보낸 .. 바로 아래 예와 같이, 루프 밖으로 나오 다음 음
+0
이것은 어떻게하는지 보여주는 좋은 예입니다. 고맙습니다! :) – Ikbel
관련 문제
- 1. Autoclose GNU Readline
- 2. 경량 GNU readline 대체
- 3. GNU readline 공백 인용
- 4. C에서 GNU Readline 구현하기 도움말
- 5. readLine()에서 응답 읽기 readLine()
- 6. FreeBSD, OpenBSD에서 기본 Python과 연결된 GNU Readline?
- 7. C에서 Readline 함수가 이상한 결과를 출력합니다.
- 8. GPL이 아닌 GNU Readline 라이브러리의 간단한 대체물
- 9. macosx에서 libedit보다는 GNU readline 라이브러리를 어떻게 링크합니까?
- 10. Readline (libedit) non-stdin 입력
- 11. Java : readLine()의 잘못된 입력
- 12. BufferedReader readline
- 13. readline 라인 제출 금지
- 14. ReadLine() 콜백
- 15. Writeline/Readline
- 16. 의 readline
- 17. 파이썬 .readline()
- 18. Python의 readline() 함수가 작동하지 않는 것처럼 보입니까?
- 19. Python - Readline 및 비교
- 20. C# ReadLine 변환 문제
- 21. 다음의 readLine 메소드는 무엇을합니까?
- 22. Android : BluetoothSocket readLine timeout
- 23. Jupyter IRKernel의 readline()
- 24. Ruby의 ReadLine 단어 랩
- 25. readline() 함수에 문제가있다. Python
- 26. 다른 방법에 대한 ReadLine 입력 사용
- 27. Readline 라이브러리의 화살표 키에 바인딩
- 28. C에서 ReadLine 메서드를 사용합니다.
- 29. 유닉스 스타일의 패스워드 readline
- 30. C readline 함수
을
select()
를 "웨이크 업"하기 위해 (및/또는 타임 아웃)이 두 번째 디스크립터를 사용하는 '함수는 * 차단 *입니다. 여러 개의 스레드를 사용하여 터미널에 인터럽트를 보낼 수 있습니다. 또한, 당신은 * 왜 * 당신이 기능을 "취소"하려고하는지 자세히 설명해 주시겠습니까? –