open : file descriptor 가 0으로 열리는 경우?
글쓴이: antz / 작성시간: 월, 2003/09/22 - 9:05오후
pynoos님의 지적으로 수정합니다.
파일포인터 -> file descriptor
답변 감사드립니다. :D
Quote:
안녕하세요.file = open("test.txt", RDONLY);
문1> 이런식으로 했을 때 file이 0인경우가 정상인가요???
if ((file=open("test.txt", RDONLY)) > 0)
{
파일이 정상적으로 열리면...
}저는 0이 에러라는 생각에 있었는데...
프로그램을 짜다 보니 file descriptor가 0값이 나오네요.
문2> 혹시 file descriptor로 0이 안나오게 한다던지 하는 건 없나요?
프로그램을 짜놓았는데...
당황되네요.
답변 부탁드리겠습니다.
Forums:
file pointer 가 아니라 file descriptor 이며,
file pointer 가 아니라 file descriptor 이며,
이것은 0 부터 시작하는 값입니다.
대개 0, 1, 2 는 stdin, stdout, stderr 로 사용됩니다.
그러나, close(0) 한뒤 open 하는 첫 descriptor는 0 을 갖게 되죠.
---
http://coolengineer.com
대부분의 시스템 콜은 정상적일 경우 0을 리턴합니다. 보통 0이 아닌 경
대부분의 시스템 콜은 정상적일 경우 0을 리턴합니다. 보통 0이 아닌 경우(특히 -1)가 에러이죠...
물론 0이 아닌 양수가 정상적인 return 값인 경우도 있습니다.(bytes나 count에 관련된 것들...)
[code:1]file = open("test.txt&q
file = open("test.txt", RDONLY);
문1> 이런식으로 했을 때 file이 0인경우가 정상인가요???
위에서는 0일때는 참이 아닙니다.
if ((file=open("test.txt", RDONLY)) >= 0) 이되여야 0도 포함되죠.
저는 0이 에러라는 생각에 있었는데...
대부분의 시스템콜은 -1이 에러입니다. 음수값이 아니면 성공적이 return을 가르키죠.프로그램을 짜다 보니 file descriptor가 0값이 나오네요.
open으로 fd를 return해줄때는 현재 사용하지않는 fd중 가장작은 값을 줍니다. 보통 0(표준입력), 1(표준출력), 2(표준에러)를 사용하기때문에 3이 return되죠. 즉 0이 return되려면 0(표준입력)을 close(0)하고 open하면되는거죠.문2> 혹시 file descriptor로 0이 안나오게 한다던지 하는 건 없나요?
default는 0이 안나옵니다.
위에 말한대로 0, 1, 2은 default로 셋팅이되서 나옵니다.
일반적으로 0이외의 리턴값은 에러를 나타냅니다.에러 종류가 여러가지가
일반적으로 0이외의 리턴값은 에러를 나타냅니다.
에러 종류가 여러가지가 될수 있기 때문에 그렇답니다.
위에서는 filedescripter이기 때문에 stdin을 나타내는 겁니다.
^^
댓글 달기