학습 테스트에서 read (2)를 사용하는 데 몇 가지 문제가 있습니다.POSIX read (2), 예기치 않은 동작
#include <stdio.h>
int main() {
size_t length;
read(0, &length, sizeof(length));
printf("input = %u\n", length);
return 0;
}
은이 코드가 표준 입출력 8 바이트 (즉 아스키 문자)을 읽는 것으로 가정 길이 변수에 저장 :
코드는 다음과 같다. 그런 다음 8 바이트의 해당 부호없는 int 값을 stdout에 인쇄합니다.
그래서 내 테스트를 해보겠습니다.이 프로그램을 리눅스 터미널에서 실행하고 'enter'하십시오. 나는 길이의 가치가 단지 10 (line feed char의 ascii 값) 일 것을 기대한다.
#include <stdio.h>
int main() {
int a = 10;
size_t length;
int b = 123;
ssize_t n = read(0, &length, sizeof(length));
printf("input = %u\n", length);
return 0;
}
$ ./test
input = 10
그래서, 요점은 무엇입니까 :
그러나이 테스트 (너무 많이) 실행 : 내가 기대처럼
$ ./test
len = 4195338
그러나이 코드 버전은 작동? 왜 임의의 미사용 변수를 추가하고 read()의 반환 값을 저장하면 동일한 입력의 결과가 달라 집니까?
N.B. read (2)는 원시 시스템 호출이고 터미널로부터 입력을 읽지 않아야한다는 것을 알고 있습니다. 이것은 단지 학습 질문입니다.
어떻게 프로그램에'/ test' 공급 데이터입니다.? 프로그램에서 입력되는 내용 - 입력 데이터로 가져 오는 내용 (그리고 여전히'len = 4195338'은 아마도'input = 4195338'이어야합니다.) –
@JonathanLeffler 터미널에서 프로그램을 실행 한 다음 키보드에서 엔터를 누르십시오. – eang