call_dev.c 파일을 보면 중간에 구조체가 등장한다. 그 부분을 제대로 이해하기 위한 짧막한 설명이다.
...
// 구조체다
struct file_operations call_fops = {
.owner = THIS_MODULE,
.llseek = call_llseek,
.read = call_read,
.write = call_write,
.unlocked_ioctl = call_ioctl,
.open = call_open,
.release = call_release,
};
...
#include <stdio.h>
/* 구조체 '타입'을 선언 */
struct student {
int num;
char * name;
};
/* 구조체 '변수'를 선언과 동시에 초기화한 방식 */
struct student test = {
.num = 1,
.name = "test"
};
int main()
{
/* 구조체 '변수' 선언과 동시에 바로 가져다 쓸 수 있음 */
printf("num : %d, name : %s\n",test.num, test.name); // 선언과 동시에 초기화 했기 때문에 바로 사용가능
/* 선언된 구조체 '타입'을 이용한 일반적 방식 */
struct student st = {1, "ksh"};
printf("num : %d, name : %s\n",st.num, st.name);
struct student sa[2] = {{1, "ksh"},{2,"aaa"}};
printf("num : %d, name : %s\n",sa[0].num, sa[0].name);
printf("num : %d, name : %s\n",sa[1].num, sa[1].name);
struct student * pSt;
pSt = &st;
printf("num : %d, name : %s\n",pSt->num, pSt->name);
}
struct student
의 크기는 8바이트(int 4바이트 + char* 포인터의 주소 4바이트)이다.
선언과 동시에 변수로 선언하는 형태에서는 .멤버명 = 값
형태로 써줌으로써 선언과 동시에 값을 초기화해줄 수 있다.