일종의 소셜 네트워크 인 제가하고있는이 대학 프로젝트 (제가 과거에 몇 개의 게시물을 만들었습니다) 사용자가 메시지를 교환 할 수 있어야합니다.파일 입출력 (메시지 문자열 읽기/쓰기)에 대한 많은 질문이 있습니다.
처음에는 모든 메시지를 링크 된 목록에 보관하도록 데이터 구조를 설계하여 메시지 크기를 256 자로 제한했습니다. 그러나 디스크에 메시지를 저장하고 필요할 때만 읽을 경우 강사가 선호한다고 생각합니다. 물론, 그들은 그들이 무엇을 선호하는지 말하지 않을 것이며, 나는 선택의 여지를두고 최선을 정당화해야만 내가 그 길을 갔다.
더 이상 각 사용자의 최근 20 개 메시지 만 저장하면됩니다.
지금은받은 편지함 역할을하는 해시 테이블이 있는데, 이것은 사용자 프로필 내에 있습니다. 이 해시 테이블은 이름 (메시지를 보낸 사용자)에 의해 인덱싱됩니다. 각 요소의 값은 배열이 12 개의 요소 (위에서 말한 20 개의 메시지)를 갖는 size_t
의 배열을 유지합니다. 아이디어는 쓰여진 디스크 파일 오프셋과 바이트를 추적하는 것입니다. 그런 다음 메시지를 읽어야 할 때 fseek()
을 사용하고 필요한 바이트를 읽어야합니다.
나는 이것이 잘 작동 할 수 있다고 생각한다 ... 네트워크의 모든 사용자가 보낸 모든 메시지를 보관할 단일 파일을 사용할 수있다. 저는 한 명씩 한 파일을 말하고 있습니다. 왜냐하면 동료가 강사에게 각 사용자의 메시지를 독립적으로 저장하는 것에 대해 물었 기 때문에 그는 파일 시스템이 한계가 있기 때문에 최선의 방법이 아닐 수도 있다고 대답했습니다. 그래서 내가 단일 파일 경로를 선택하려고합니다.
그러나이 문제는 ... 최근 20 개의 메시지 만 저장해야하므로이 제한에 도달하면 이전 메시지를 삭제해야합니다.
어떻게 해야할지 모르겠지만 ... 내가 아는 전부는 파일에서 바이트를 읽고 쓰는 데 약 fread()
및 fwrite()
입니다. 파일 오프셋에 가서 "다음 X 바이트를 삭제하십시오"라고 어떻게 말할 수 있습니까? 내가 할 수있는 경우에도 또 다른 문제가 있습니다 ... 그 아래에있는 모든 오프셋은 완전히 다르며 문제를 해결하기 위해 모든 사용자 사서함을 처리해야합니다. 어떤 고통을 것입니다 ...
그럼, 내 제안을 해결하기 위해 어떤 제안? 너는 무엇을 제안 하는가?
그게 내가 생각한 ... 나는 메시지에 고정 길이를 사용하는 아이디어를 좋아하지 않는다. 최대 값은 256이지만 메시지가 단순한 "안녕하세요, 어떻게 지내세요?"라면 256 바이트를 쓰고 싶지 않습니다. 그리고 나는 그런 외부 libs를 사용할 수 있습니다. 그것은 목적을 이길 것입니다 ... –