2013-03-26 3 views
0

오픈 시스템 호출을 사용하여 tty 포트를 열려고 시도합니다. HOw 열려있는 시스템 호출이 -1을 반환하는 경우이 포트가 다른 응용 프로그램에서 사용되고 있는지 알고 있습니까?오픈 시스템 호출 - 리눅스

동일한 오류 코드를 찾을 수 없습니다.

+1

실제 오류 코드를 찾으려면'open()'이'-1'을 반환하면'errno'를 검사해야합니다. 오류에 대한 더 많은 통찰력을 줄 것입니다 ... 이미 사용 중인지 여부를 말할 수는 없을 것이라고 생각합니다. – jszakmeister

+0

표준 C의 다른 응용 프로그램에서 파일을 열 었는지 확인할 수 없습니다. 시스템 유틸리티 (lsof) 또는 사례 별 솔루션 (문제가되는 모든 프로세스에서 사용되는 경우 자문 파일 잠금)을 사용할 수 있습니다. –

답변

0

open() (으)로 전화하면 파일이 이미 열려 있어도 오류가 표시되지 않습니다.

Howerver, 당신은 리눅스 lsof 명령의 출력을 분석하는 시도 할 수 있습니다 :

lsof /dev/ttyS0

그것은 주어진 파일을 연 프로세스에 대한 정보를 반환합니다 (이 경우 :는/dev/ttyS0에) .

(나는 그것에 대해 확실하지 않다 그래서이 몇 번 테스트했지만, lsof은 파일이 프로세스에 의해 열려있는 경우 0을 반환하고 어떤 과정을 개설하지 않은 경우 1를 반환하는 것 . 그러나 이것은 당신이 정말로 명령 자체)

0
#include <errno.h> 
#include <stdio.h> 
#include <strcing.h> 

int main() 
{ 
    if(open("/dev/ttyS0", O_RDWR)) 
     printf("errno = %s\n", strerror(errno)); 

    return errno; 
} 

오류 코드가 무엇인지 파악하기 위해이 link 볼의 출력을 분석 제안, 표시 될 수 있습니다.