[완료]unix c 코딩 관련 질문입니다..

skillzmjay의 이미지

안녕하세요

헤더파일에서 원하는 구조체의 내용을 발췌하고 싶은데
어떤식으로 할지 감이 잘 안잡히네요;;

typedef struct {
char aaa[12];
char bbb[11];
char ccc[23];
char ddd[22];
} A_S;

typedef struct {
char b_aaa[12];
char b_bbb[11];
char b_ccc[23];
char b_ddd[22];
} B_S;

예를 들면 헤더파일에 다음과 같은 구조체들이 있을때

B_S 구조체내 변수의 길이를 뽑아내고 싶습니다. (12, 11, 23, 22)

한줄씩 순차적으로 읽으면서 B_S 란 문구를 찾을수 만 있다면 쉽게 구현할수
있을거 같은데 구조체 정의가 항상 '} 0000;' 이런식으로 중괄호에 한칸띄고
구조체명이 정의되었다고는 확신할순 없습니다. (그래서 memcmp 를 못쓰겠습니다...)
제가 생각하는 방식은 한줄씩 읽으면서 파이프를 통해 grep 으로
해당 구조체명이 있는지 확인하면 될거 같은데 (grep 한 결과를 strlen 했을때 0이 아닌걸 찾으면 되겠죠?) 이걸 어떻게 구현해야할지 모르겠네요;
fgets, fprintf, stdout, popen, grep...등등이 떠오르는데 정리가 안되네요 ㅠㅠ

고수님들 도움좀 부탁드립니다! 굽신굽신

skillzmjay의 이미지

echo 를 쓰면 되겠네요..게시판 더렵혀서 죄송합니다.

익명 사용자의 이미지


간단하게는 아래처럼 할 수 있겠네요..
struct안에 nested 중괄호가 있는 경우는 안되고요. 그밖에 안되는 경우도 있을 수 있습니다.

cat header.h | perl -ne "print if /struct\s*{/../}/" | perl -ne "print if /\[\d+\]/ && s/.*\[(\d+)\].*/\1/"

익명 사용자의 이미지

아.. 원하는 스트럭쳐만 골라서 하려면

첫번째 perl의 /}/ 부분을 /}\s*B_S\s*;/로 하시면 되겠네요..

skillzmjay의 이미지

perl 이 안먹네요;;;

ksh: perl: 찾을 수 없음
ksh: perl: 찾을 수 없음