printf
기능을 사용하여 직렬 포트에서 문자를 인쇄하고 싶습니다. 나는이 2 게시물 1 및 2을 읽고, 그러나 I'am 확실하지 manip 이해하기 :printf를 직렬 포트로 다시 지정
가 말했다 년대 1st link에 :
는 printf와 기능을 사용하려면를 먼저 새 __FILE
구조체를 작성해야합니다. 이 구조체는 FILE 구조체와 함께 호출됩니다.
왜 내가 __FILE
구조체를 만들어야 만 하는가? 나는이 문장을 실제로 이해하지 못했다. 2nd link에서
는 우리가 또한 __stdout
및 __stdin
을 재정의해야했다 표준 I/O 라이브러리에서 분리를 완료하려면
__FILE
구조의 선언 아래에있는 retarget.c 파일에서 찾을 수 있습니다.
이 2 개의 변수를 재정의하는 것은 컴파일 오류가 아니라 다시 정의하는 것입니다.
을 - http://www.sparetimelabs.com/tinyprintf/tinyprintf.php
는
다시 언젠가 내 자신의 글에서 복사 -ps. 'dup2()'를 가지고 있습니까? 여러분의 플랫폼은'stdout'을위한 파일 기술자'1'을 사용하는 리눅스와 같이 "표준"'stdout' 파일 디스크립터 값을 갖고 있습니까? 그렇다면'int fd = open ("/ path/to/port"...); dup2 (fd, STDOUT_FILENO);'. 'stdout' 버퍼링을 비활성화 할 수 있습니다. –아마도 freopen이 당신에게 유용 할 수 있습니다. – JohnTortugo
피드백을 주셔서 감사합니다, @ undrewstand 'printf'는'fputc'를 사용하여 screen에 caracter를 표시하므로'printf' 함수 어딘가에'fputc (stdout, car)'호출이 있습니다. 만약 우리가 복사 된 stdout fd를 가지고 있다면,'car'도 새로운 fd (dup에 의해 생성 된)에 printd 될 것입니다. 그렇다면 어떤 일이 발생합니까? – Mouin