[질문/커널프로그래밍] 문자형 정수인 아이피 리스트를 읽어서 16진수 정수형으로 저장할려고 합니다.
안녕하세요?
다름이 아니고, 문자형 정수인 아이피 리스트(ip.txt)를 읽어서 16진수 정수형으로 재저장할려고 합니다.
ip.txt 파일을 읽으면,
buf1
--------------------------------------------------------------------------------------
|1|9|2|.|1|6|8|.|0|.|1|\n|1|9|2|.|1|6|8|.|0|.|2|\n|1|9|2|.|1|6|8|.|0|.|3|\n|......
--------------------------------------------------------------------------------------
이런 식으로 들어가잖아요?
이때,
192는 16진수로 C0, 168은 16진수로 A8, 0은 16진수로 00, 1은 01 이죠.
즉, 위 버퍼의 내용을 읽어서(버퍼에는 char로 들어가 있겠죠),
buf2
---------------------------------------------------
|0x0100A8C0|0x0200A8C0|0x0300A8C|......
---------------------------------------------------
이렇게 다시 저장할려고 합니다. buf2는 int구요.
그러면 어떻게 하면 될까요? 참, buf2는 전역변수로 선언해서 다른 모듈함수에서 사용할려고 합니다.
int fd;
char buf1[1];
fd=sys_open("ip.list", O_RDONLY, 0);
if(fd>0){
while(sys_read(fd,buf1,1)>0){
...... 여기에 들어갈 내용 ......
}
sys_close(fd);
위에서 처럼 빈공간에 들어가야할 내용이거든요.
많은 분들의 도움 부탁드립니다~
(아시겠지만, 커널 프로그래밍이라서 C라이브러리 함수는 사용을 못 합니다.)
감사합니다.
커널
커널 프로그래밍이라서 C라이브러리 함수는 사용을 못한다는 편견은 버리세요.
glibc 를 사용하지는 못하지만 커널도 막강한 라이브러리를 가지고 있습니다.
아니, 커널 자체가 glibc 를 뛰어넘는 라이브러리입니다.
각설하고, 커널의 lib/ 디렉토리에 뭐가 들었는지 구경이나 해보세요.
댓글 달기