c setvbuf () 함수 호출이 예상대로 작동하지 않습니다.

mzoz

나는 시스템 프로그래밍을 배우고 있으며 다음 코드를 실행할 때

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

int main()
{
    char buff[5];
    setvbuf(stderr, buff, _IOFBF, 5);
    for (int i = 1; i < 10; i++) {
        fprintf(stderr, "%d", i);
    }
    _exit(0);
}

setvbufstderr5 바이트 크기의 버퍼로 완전히 버퍼링 된 정책을 부과하고 있으므로 얻을 것으로 예상 12345했지만 대신 인쇄합니다 1234567. 왜 그런가요 ?

이끼

strace-ing 프로그램은 glibc에 대해 컴파일 될 때 먼저 크기 1의 쓰기를 수행 한 다음 크기 5의 쓰기를 수행하고 마지막으로 크기 1의 쓰기를 수행함을 보여줍니다.

$ strace -o /dev/stdout -e write,writev ./a.out 2>/dev/null
write(2, "1", 1)                        = 1
write(2, "23456", 5)                    = 5
write(2, "7", 1)                        = 1

musl을 사용하면 크기 1의 7 번 쓰기를 수행합니다.

$ strace -o /dev/stdout -e write,writev ./a.out 2>/dev/null
writev(2, [{iov_base="1", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="2", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="3", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="4", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="5", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="6", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="7", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="8", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
writev(2, [{iov_base="9", iov_len=1}, {iov_base=NULL, iov_len=0}], 2) = 1
+++ exited with 0 +++

따라서 두 C 라이브러리 구현 모두의 size인수를 setvbuf(stream, buf, _IOFBF, size)최대 값으로 취급 하고 버퍼가 가득 차기 전에 자유롭게 플러시 할 수 있습니다.

AFAICS는이 해석에 반하는 표준에 아무것도없는 것 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Python의 magic mock이 예상대로 작동하지 않습니다. 실제 함수가 호출됩니다.

분류에서Dev

C # 상속이 예상대로 작동하지 않습니다.

분류에서Dev

JQuery .load ()의 JavaScript 함수 호출이 예상대로 작동하지 않습니다.

분류에서Dev

C 계산이 예상대로 작동하지 않습니다.

분류에서Dev

C double이 예상대로 작동하지 않습니다.

분류에서Dev

.c_str ()이 예상대로 작동하지 않습니다.

분류에서Dev

함수가 자동으로 호출되고 예상대로 작동하지 않습니다.

분류에서Dev

함수의 반환 문이 예상대로 작동하지 않습니다.

분류에서Dev

setTimeOut이 함수에서 예상대로 작동하지 않습니다.

분류에서Dev

C # 가상 속성이 예상대로 작동하지 않습니다.

분류에서Dev

C-비트 이동이 예상대로 작동하지 않습니다.

분류에서Dev

값에 의한 C ++ 함수 호출이 작동하지 않습니다.

분류에서Dev

C # POST json이 예상대로 작동하지 않습니까?

분류에서Dev

부동 소수점 산술이 예상대로 작동하지 않습니다.

분류에서Dev

Excel OR 함수가 예상대로 작동하지 않습니다.

분류에서Dev

MAX () 함수가 예상대로 작동하지 않습니다.

분류에서Dev

__construct 함수가 예상대로 작동하지 않습니다.

분류에서Dev

Python 함수가 예상대로 작동하지 않습니다.

분류에서Dev

addeventlistener 함수가 예상대로 작동하지 않습니다.

분류에서Dev

Splice () 함수가 예상대로 작동하지 않습니다.

분류에서Dev

case 문이 예상대로 작동하지 않음 (fuzzytime () 함수)

분류에서Dev

C 스레딩 (pthread_create)이 예상대로 작동하지 않습니다.

분류에서Dev

조건이 예상대로 작동하지 않는 동안 C ++ 수행

분류에서Dev

기본 함수 인수로 DataFrame이 예상대로 작동하지 않습니다.

분류에서Dev

jquery 양식이 예상대로 작동하지 않습니다. ajaxForm은 함수가 아닙니다.

분류에서Dev

일반 함수에 대해 유형 추론이 예상대로 작동하지 않습니다.

분류에서Dev

수면 기능이 예상대로 작동하지 않습니다.

분류에서Dev

rspec 수신 방법이 예상대로 작동하지 않습니다.

분류에서Dev

Python의 수식이 예상대로 작동하지 않습니다.

Related 관련 기사

  1. 1

    Python의 magic mock이 예상대로 작동하지 않습니다. 실제 함수가 호출됩니다.

  2. 2

    C # 상속이 예상대로 작동하지 않습니다.

  3. 3

    JQuery .load ()의 JavaScript 함수 호출이 예상대로 작동하지 않습니다.

  4. 4

    C 계산이 예상대로 작동하지 않습니다.

  5. 5

    C double이 예상대로 작동하지 않습니다.

  6. 6

    .c_str ()이 예상대로 작동하지 않습니다.

  7. 7

    함수가 자동으로 호출되고 예상대로 작동하지 않습니다.

  8. 8

    함수의 반환 문이 예상대로 작동하지 않습니다.

  9. 9

    setTimeOut이 함수에서 예상대로 작동하지 않습니다.

  10. 10

    C # 가상 속성이 예상대로 작동하지 않습니다.

  11. 11

    C-비트 이동이 예상대로 작동하지 않습니다.

  12. 12

    값에 의한 C ++ 함수 호출이 작동하지 않습니다.

  13. 13

    C # POST json이 예상대로 작동하지 않습니까?

  14. 14

    부동 소수점 산술이 예상대로 작동하지 않습니다.

  15. 15

    Excel OR 함수가 예상대로 작동하지 않습니다.

  16. 16

    MAX () 함수가 예상대로 작동하지 않습니다.

  17. 17

    __construct 함수가 예상대로 작동하지 않습니다.

  18. 18

    Python 함수가 예상대로 작동하지 않습니다.

  19. 19

    addeventlistener 함수가 예상대로 작동하지 않습니다.

  20. 20

    Splice () 함수가 예상대로 작동하지 않습니다.

  21. 21

    case 문이 예상대로 작동하지 않음 (fuzzytime () 함수)

  22. 22

    C 스레딩 (pthread_create)이 예상대로 작동하지 않습니다.

  23. 23

    조건이 예상대로 작동하지 않는 동안 C ++ 수행

  24. 24

    기본 함수 인수로 DataFrame이 예상대로 작동하지 않습니다.

  25. 25

    jquery 양식이 예상대로 작동하지 않습니다. ajaxForm은 함수가 아닙니다.

  26. 26

    일반 함수에 대해 유형 추론이 예상대로 작동하지 않습니다.

  27. 27

    수면 기능이 예상대로 작동하지 않습니다.

  28. 28

    rspec 수신 방법이 예상대로 작동하지 않습니다.

  29. 29

    Python의 수식이 예상대로 작동하지 않습니다.

뜨겁다태그

보관