2012-07-09 1 views

답변

10
int errno=0; 

문제는 당신함으로써 (심지어 일반 변수가 될 필요는 없다) 글로벌 기호를 그림자, errno을 재 선언입니다 포함하는 것을 잊지 말라. 그 효과는 무엇이며 open이 무엇이며 인쇄중인 것은 다른 것입니다. 대신 errno.h 표준을 포함해야합니다.

+2

또한 'errno = 0'을 사용하지 마십시오.이 경우 string.h을 포함해야합니다. 어쨌든'open'은 올바르게 설정 될 것입니다. – ArjunShankar

+0

그리고이 open()은 무엇을합니까? –

+1

@ Mr.32 열린 전화는 일반적으로 콘솔과 연결된'tty' 장치를 직접 여는 것으로 보입니다. 오류 메시지가 EPERM이라고 의심됩니다. – cnicutar

2

스스로 변수를 정의해서는 안됩니다. errno 그것은 errno.h에 정의 된 전역 varibale (aclually 그냥 varibale보다 복잡합니다)이므로 int errno = 0;을 제거하고 다시 실행하십시오. errno.h

1

모듈이 추가하십시오 : #include <errno.h> 대신 당신은 효과적으로 글로벌 errno 마스킹, 로컬 errno 변수를 선언하고

1

int errno;의. 당신은

#include <errno.h> 
... 

extern int errno; 

... 
fd = open("/dev/tty0", O_RDWR | O_SYNC); 
if (fd < 0) { 
    fprintf(stderr, "errno is %d\n", errno); 
    ... error handling goes here ... 
} 

당신은 또한 사람이 읽을 수있는 오류 메시지에 errno는 정수를 설정하는 strerror()을 사용할 수 있습니다 :, 예컨대을 errno.h을 포함하고, 통근 errno를 선언해야합니다.