여기에 enter_data 파일의 데이터를 복사하여 insert (key, keys) 함수로 전달하려고합니다.하지만 세그먼트 오류가 발생하고 그 이상이 발생합니다. 분류는 구조이며, packet_filter 내가fread를 사용하면서 파일에서 데이터를 읽을 수 없다면 세그먼트 화 오류가 발생했습니다
struct classifier
{
int key_node;
struct packet_filter pktFltr;
struct classifier *next;
}__attribute__((packed));
void addrule(struct classifier keys)
{
int key;
FILE *fp;
fp = fopen("enter_data","r");
fread(&keys, sizeof (struct classifier), 3, fp);
insert(key,keys);
fclose(fp);
}
SRC와 DST의 IP Address가 생깁니다 및 SRC와 DST 포트 번호를 입력합니다 점에서 IP와 UDP의 구조를 가지고
여기에 파일에서 데이터를 읽을 수 없습니다입니다
file: enter_data
key = 822;
keys.key_node = 822;
inet_aton("172.28.6.137", &(keys.pktFltr.ip.ip_src));
inet_aton("172.28.6.10",&(keys.pktFltr.ip.ip_dst));
keys.pktFltr.protocol.proto.uh_sport = ntohs(1032);
keys.pktFltr.protocol.proto.uh_dport = ntohs(5000);
keys.next = NULL;
key = 522 ;
keys.key_node = 522;
inet_aton("172.28.6.87", &(keys.pktFltr.ip.ip_src));
inet_aton("172.28.6.110",&(keys.pktFltr.ip.ip_dst));
keys.pktFltr.protocol.proto.uh_sport = ntohs(1032);
keys.pktFltr.protocol.proto.uh_dport = ntohs(5010);
keys.next = NULL;
key = 522 ;
keys.key_node = 522;
inet_aton("172.28.6.87", &(keys.pktFltr.ip.ip_src));
inet_aton("172.28.6.110",&(keys.pktFltr.ip.ip_dst));
keys.pktFltr.protocol.proto.uh_sport = ntohs(1032);
keys.pktFltr.protocol.proto.uh_dport = ntohs(5011);
keys.next = NULL;
당신이 segfault의 정확 인 위치를 결정하는 데 그 코드에 디버거를 실행하려고 적이 있습니까? –
두 번째 게시물이 파일이면이 코드는 작동하지 않습니다. 이진 직렬화를 사용하여 읽으려고하지만 파일이 텍스트 파일입니다. – Chad