Ioctl() SCSI_IOCTL_SEND_COMMAND에 대해 질문드립니다.
글쓴이: alsrud / 작성시간: 금, 2015/03/20 - 10:17오전
안녕하세요 :) 혼자 C언어를 공부하며 오픈 소스를 보고 있는데요, ioctl함수의 SCSI_IOCTL_SEND_COMMAND에 대해 몇 가지 궁금한 점이 있어 질문을 올립니다.
코드는 스카시디스크의 시리얼 넘버를 읽어오는 코드 입니다.
Struct sdata { unsigned int inlen; //디바이스에 쓰여진 데이터의 길이 unsigned int outlen; //디바이스로부터 읽어들인 데이터의 길이 unsigned char cmd[4]; unsigned char outbuf[24]; } sg_id; sg_id.inlen = 0; sg_id.outlen = sizeof(sg_id.outbuf); //outbuf->디바이스로부터 읽어들인 데이터 sg_id.cmd[0] = 0x12; sg_id.cmd[1] = 0x01; sg_id.cmd[2] = 0x80; sg_id.cmd[3] = 0x00; memset(sg_id.outbuf, 0x00, sg_id.outlen); if ((fd = open(partname, O_RDONLY)) < 0) return (-1); ret = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, &sg_id); close(fd);
1. cmd배열의 크기를 4로 지정한 이유와 초기값을 0x12, 0x01, 0x80, 0x00으로 준 이유가 궁금합니다.
2. SCSI_IOCTL_SEND_COMMAND가 실행되면 cmd배열의 명령을 실행해 sg_id구조체의 outbuf에 값을 저장해 가져온다는 의미가 맞는 것인지 궁금합니다.
SCSI_IOCTL_SEND_COMMAND를 구글링해도 정확한 정보를 찾을 수 없어 도움말씀 부탁드립니다^^
Forums:
아는대로 답 드립니다...
>> 1. cmd배열의 크기를 4로 지정한 이유와 초기값을 0x12, 0x01, 0x80, 0x00으로 준 이유가 궁금합니다.
일련 번호를 조회하기 위한 INQUIRY 명령의 정의가 0x12 0x01 0x80 0x00으로 되어있기 때문입니다. 당연히 4바이트가 필요하니 4로 지정한 것 뿐이구요.
>> 2. SCSI_IOCTL_SEND_COMMAND가 실행되면 cmd배열의 명령을 실행해 sg_id구조체의 outbuf에 값을 저장해 가져온다는 의미가 맞는 것인지 궁금합니다.
맞습니다.
Talk is cheap. Show me the code.
https://www.potatogim.net/
댓글 달기