본문 바로가기

프로그래밍/C

[C언어]C언어 시리얼통신 - CreatFile (RS232, RS485 등)

반응형

1.CreateFile

파일 또는 I/O장치를 만들거나 여는 함수입니다. 일반적으로 사용되는 I/O장치는 파일, 파일스트림, 디렉터리, 실제 디스크, 볼륨, 콘솔 버퍼, 테이프 드라이브, 통신 리소스, 메일 슬롯 및 파이프입니다. 저는 CreateFile함수를 이용하여 시리얼통신을 위한 COM Port를 사용했으며, 제가 아는만큼 설명할수밖에 없으니  이 글에서 이 함수는 시리얼통신을 위하는게 주 목적으로 사용할 것 입니다. 이 함수는 파일이나 장치들의 핸들을 반환하며, 핸들을 통해 장치를 액세스하는 데 사용할 수 있습니다.

 

문법

WINAPI CreateFile(

LPCTSTR lpFilename,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

}

 

설명

lpFilename: 열고자 하는 디바이스파일의 이름으로, 시리얼 포트의 경우 "COM1", "COM2"등을 사용합니다. 저는 한 프로그램으로 어느 포트든 사용할 수 있게 프로그램 실행 시 포트넘버를 지정해서 변수에 저장하여 인자값으로 사용할 수 있게 하였습니다. COM Port같은 특수장치에 대한 자세한 내용은 MSDN에서 "MS-DOS 장치 이름 정의"를 참조하시면 됩니다.

 

dwDesiredAccess: 파일의 권한을 지정합니다. 리눅스의 rwx를 생각하시면 됩니다. 가장 일반적으로 사용되는 값은 GENERIC_READ, GENERIC_WRITE입니다. 저는 이 두 옵션을 OR연산을 사용하여 지정하였습니다. ( GENERIC_READ | GENERIC_WRITE)

 

dwShareMode: 파일의 공유 여부를 지정하는 옵션입니다. 기본적으로 0을 지정하면 파일이나 장치를 공유할 수 없으며, 다른 프로세스가 파일이나 장치를 연 상태에서 공유할 수 있게하려면 원하는 값을 넣어주면 됩니다.(원하는 값은 MSDN을 참조해주세요!)

 

lpSecurityAttributes: 자식프로세스에게 반환된 핸들을 상속할 것인지 결정하는 프로세스입니다. 자식프로세스 만들일 없으니 이 값도 그냥 NULL로 사용하였습니다.

 

dwCreationDisposition: 파일을 열때 새 파일을 만들것인지, 파일이 없으면 파일을 어떻게 할것인지 등을 결정하는 옵션입니다. 저희는 COM Port, 즉 '장치'에 대한 설정을 하는 것이니 'OPEN_EXISTING'으로 설정해주면 됩니다. (OPEN_ALWAYS로 설정해도 동작은 잘 되더라고요!)

 

dwFlagsAndAttributes: 파일의 옵션을 지정하는 값입니다. 자세한 옵션은 역시 MSDN을 참조해주시면 되고 저같은 경우는 FILE_ATTRIBUTE_NORMAL옵션을 사용하였습니다. (논오버랩 방식) 

 

hTemplateFile: 액세스 권한이 있는 템플릿파일데 대한 핸들을 뜻하는데, 시리얼통신의 경우에는 관계 없으니 0을 넣어줍니다.

 

반환값

함수가 성공하면 지정된 파일이나 장치의 핸들값을 반환합니다.

 

 

이렇게 핸들값을 얻으면 C언어에서 해당 장치를 자유롭게 사용할 수 있습니다!

C언어를 이용한 시리얼통신은 시간이 나는대로 작성할 예정이며, 다음에는 아마 Readfile과 Writefile에 대한 설명을 할 것입니다!

그럼 모두 수고하세용~~!!

 

 

 

반응형