2010-06-28 7 views
1

프로그래밍 플랫폼으로 C 언어와 Linux를 사용하고 있습니다.설정 파일에서 값 설정 및 가져 오기

샘플 응용 프로그램에서. 맞춤 설정 파일의 값을 가져 와서 설정하고 싶습니다. 아래는 나의 구성 파일의 구조입니다.

idlevalue=5 
sleeping=1 

이제 내 문제는 내 응용 프로그램에서 설정 기능을 구현하는 방법을 생각하고 있습니다.

파일의 모든 내용을 가져 오려고합니다. 그런 다음 포인터의 위치를 ​​특정 값으로 설정 한 다음 값을 변경하십시오. 그런 다음 모든 데이터를 다시 파일에 기록하십시오.

설정 파일의 값을 설정하는 것이 점점 더 어려워 보입니다.

상담하십시오.

답변

2

SO과 밀접한 관련이있는 다른 질문이 있습니다.

libconfig과 같은 라이브러리가 이러한 종류의 자료를 처리합니다.

2

편집 : 나는 "당신을 실현하는 '데이터베이스로 취급하지 않는 개념적으로 그런 식으로 치료하는 제거 ... 아이디어는 구문 분석 설정 파일 :

쓰기 코드의 상단에 API를하는 것입니다 모든 변수를 메모리에 읽어 들인다. 설정 파일을 저장할 때, 하나의 특정 변수를 찾고 그 특정 변수의 값을 수정하는 대신 모든 변수를 다시 저장하면된다.

이런 식으로 좋을 것이다. :

char *config_file_path = "/foo/bar.conf"; 
struct config {...} myconfig; 
read_config(config_file_path, &myconfig); 
// set a value 
myconfig.somevalue = 5; 
// When re-writing, routine simply over-writes the entire file. 
write_config(config_file_path, &myconfig); 

사용자가 설정을 저장할 때만 파일을 써야하기 때문에, 이렇게하면 앱에서 커다란 병목 현상이되지는 않습니다.

1

확실히 - 대체하려는 데이터가 대체하려는 데이터와 크기가 다를 수 있습니다.

특히 간단한 구성 파일의 일반적인 해결책은 모두 설정을 포함하는 메모리에서 구성 파일의 전체 복사본을 간단히 작성하는 것입니다. 임시 이름으로 새 파일을 만들고 구성을 쓰고 fsync()을 호출하여 디스크에 동기화 한 다음 이전 구성 파일에 rename()을 추가합니다. (이 절차는 구성 파일을 작성하는 동안 응용 프로그램이나 컴퓨터가 충돌하더라도 손상된 구성 파일로 끝나지 않음을 의미합니다.

1

분명히 파일에서 데이터를 가져 오는 것이 쉽습니다. 값을 변경하려면 일부 구조의 모든 데이터를 가지고 있고 일부 값을 변경하려는 경우 구조에서 변경 한 다음 전체 구조를 파일로 다시 복사하는 더 쉬운 솔루션이 있습니다.

변경 사항이 하나 뿐이고 전체 데이터를 다시 파일에 쓰지 않으려는 경우 "추가"모드에서 파일을 읽고 원하는 값만 수정하면됩니다. 이름 - 값 쌍을 입력 한 다음 값을 변경하십시오. 모든 데이터를 파일로 다시 복사하는 것보다는 원하는 것을 수행하는 더 좋은 방법 인 것보다는 구현하는 데 조금 더 많은 노력이 필요합니다.

관련 문제