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에 대한 설명을 할 것입니다!
그럼 모두 수고하세용~~!!
'프로그래밍 > C' 카테고리의 다른 글
[C언어]제곱을 구하는 pow함수! 음수의 제곱도 구할 수 있을까? (0) | 2020.10.01 |
---|---|
[C언어]부동소수점으로 저장된 데이터를 정수형으로 바꾸기 (0) | 2020.09.30 |
[C언어]CMD Printf 고급 스킬! (c언어 커서 위치 바꾸기) (0) | 2020.09.30 |
[C언어]INI파일 사용하기 (GetPrivateProfileString) (0) | 2020.09.30 |
[C언어]멀티쓰레드 기반의 서버구현 (0) | 2020.09.30 |