Navigation Menu+

stdio h 다운로드

Posted on Feb 6, 2020 by in Uncategorized | 0 comments

매크로 fdev_setup_stream()는 stdio를 사용하여 작업을 위해 사용자 제공 FILE 버퍼를 준비하기 위해 제공됩니다. fopen()과 호환되는 장치 추상화를 구현할 수 있었지만 문자열을 구문 분석하고 이 문자열에서 필요한 모든 정보를 꺼내거나 필요한 추가 테이블에서 꺼내야 하기 때문에 응용 프로그램에서 제공하는 이 방법은 수행되지 않았습니다. 이러한 방식으로 초기화된 스트림이 더 이상 필요하지 않으면 먼저 매크로 fdev_close()를 호출한 다음 개체 자체를 파괴하여 삭제할 수 있습니다. 이러한 스트림에 대해 fclose()에 대한 호출을 발행해서는 안 됩니다. fclose() 자체를 호출하는 것은 무해하지만 정의되지 않은 참조가 free() 발생하므로 링커가 malloc 모듈을 응용 프로그램에 연결합니다. 이것은 기본적으로 유닉스 접근 방식을 따릅니다: 터미널과 같은 장치가 특별한 처리가 필요한 경우, 이 기능을 제공하기 위해 터미널 장치 드라이버의 도메인에 있습니다. 따라서 UART 인터페이스와 대화하는 fdevopen()에 적합한 간단한 함수는 공간 제약으로 인해 일부 기능이 전혀 구현되지 않았습니다(예: 일부 printf 변환이 제외되었습니다). 그럼에도 불구 하 고, 이 구현의 잠재적인 사용자 경고 한다: printf 및 scanf 함수의 가족, 일반적으로 유명한 같은 아마도 간단한 것 들과 관련 된 “안녕하세요, 세계!” 프로그램, 실제로 그들의 원인상당히 복잡 한 코드 공간의 공정한 금액을 먹을 수 포함. 또한 런타임에 형식 문자열을 해석하는 특성으로 인해 빠르지 않습니다. 가능하면 avr-libc에서 제공하는 (때로는 비표준) 미리 결정된 변환 시설에 의존하면 일반적으로 속도와 코드 크기 면에서 훨씬 저렴합니다.

편의를 위해 읽기 위해 스트림을 여는 fdevopen()에 대한 첫 번째 호출은 결과 스트림을 stdin에 별칭으로 만들어줍니다. 마찬가지로 쓰기를 위해 스트림을 여는 fdevopen()에 대한 첫 번째 호출은 결과 스트림이 stdout 및 stderr 모두에 별칭이 됩니다. 따라서 읽기 및 쓰기 의도 모두에서 열기가 수행된 경우 세 개의 표준 스트림이 모두 동일합니다. 이러한 별칭은 서로 구별할 수 없으므로 이러한 스트림에서 fclose()를 호출하면 모든 별칭도 효과적으로 닫힙니다(주 3). 기본적으로 fdevopen()에는 malloc()이 필요합니다. 마이크로 컨트롤러의 제한된 환경에서는 이러한 옵션이 바람직하지 않은 경우가 많므로 malloc()없이 완전히 실행될 수 있는 대체 옵션이 제공됩니다. 이 예제에서는 함수와 같은 fdev_setup_stream()가 아닌 초기화자 양식 FDEV_SETUP_STREAM()를 사용하므로 C 시작 중에 모든 데이터 초기화가 발생합니다. 프로그래머가 코드 크기와 기능 절충을 허용하기 위해 printf 제품군의 핵심인 함수 vfprintf()는 링커 옵션을 사용하여 다양한 맛으로 선택할 수 있습니다.