저는 dd
GNU coreutils 8.32부터 시작하겠습니다.
내가 달릴 때 { echo a; sleep 1; echo b; } | dd bs=4 count=1
나는 얻는다.
a
0+1 records in
0+1 records out
2 bytes copied, 2.0381e-05 s, 98.1 kB/s
dd
sleep
블록 크기에 도달하지 않아도 기간 동안 종료됩니다 EOF
. 출력이 b\n
손실됩니다. 또는 을 제거하면 sleep
이런 일이 발생하지 않습니다 count=1
.
이 동작을 설명하는 내용을 찾을 man dd
수 없습니다.
- 도착이나 만남
dd count=1
까지 기다리지 않겠습니까 ?bs
EOF
dd
강제 로 기다리게 하려면 어떻게 해야 하나요 ?
답변1
이는 dd의 동작이 아니라 운영 체제별 동작으로 인해 발생합니다. 이건 행동이야posix에 의해 지정됨.
파일에 남아 있는 바이트 수가 nbyte보다 작은 경우, read() 요청이 신호에 의해 중단되면 반환된 값은 nbyte보다 작을 수 있습니다.파일이 파이프, FIFO 또는 특수 파일이고 nbyte 미만인 경우 즉시 사용 가능독서를 위해. 예를 들어, 터미널과 연결된 파일의 read()는 입력된 데이터 줄을 반환할 수 있습니다.
설정할 때 한 번에 4바이트를 읽도록 bs=4
지정했지만 dd
이는 각각 4바이트를 요청했다는 의미입니다 read()
. 운영 체제는 덜 빈번하게 반환되며 다음 과 같은 경우가 아니면 dd
다시 반환되지 않습니다 read()
.
전체 블록을 읽기 위해 여러 작업을 수행하는 iflag=fullblock
명령이 있습니다 .dd
read()