어플에서 에러내용을 화일로 저장(100라인만)

dongssim의 이미지

어플에서 에러내용을 화일로 저장을 합니다.

#define ALARM_FILE1 "/tmp/mmc/alarm/alarm1.txt"
if(alarm_f){
fd3=open(ALARM_FILE1, O_RDWR|O_CREAT|O_APPEND, 0644);
write (fd3, datetime, strlen(datetime));
write (fd3, alm_on_buf[i], strlen(alm_on_buf[i]));
close (fd3);
}

질문내용
1. 최근 기록내용을 맨위로 WRITE할수 있나요?
2. 100라인만 기록하고 새로운 에러 발생시 가장오래된 라인 지우고
새로운 라인 기록 할수 있나요?

shint의 이미지

1. 일정 영역에 쓰기 가능합니다.
fseek()를 사용해 보세요.

2. 문법적으로는 불가능한 질문이. 컴퓨터 명령형'으로는 진행이 가능하네요. 참 신기해요. ㅇ_ㅇ;;;
100 라인 기록 -> 에러 발생 -> 마지막 라인 삭제 -> 다음 라인 기록

100 라인까지 fwrite 합니다. 구분자는 \n로 가능합니다.
마지막 라인에서 \n를 기록합니다.
다음 데이터를 넣습니다.

//
하튼. 어려운 내용이네요. ㅡ_ㅡ;;
이런 잘못된 질문'은. 앞으로 어떤 문제를 일으킬까요? 아니면. 다국어와 다문화 계층에 대한 접근 문제일지도 모르겠습니다.
사투리. 언어 장애. 외국어... 문화 교류와 소통이란건 참. 어려운 일이네요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

dongssim의 이미지

화일 open시 append로 지정하면 fseek, lseek하는것이 의미가 없이
마지막라인에 새로 추가가 됩니다.

append를 없이했을때는
lseek(fd3,0,SEEK_SET)하여 write하면 첫라인에 기록은 됩니다.

제가 원하는것은 첫라인에 새로운 알람을 insert하는것입니다.

제가 생각한것은 화일을 읽어 버퍼에 저장해놓고 새로운 알람을 기록하고
저장된 버퍼의 내용을 기록하는 방법입니다.
그런데 이것은 화일의 크기가 클때 무리가 될것 같아서...

좋은 방법이 있으면 조언 부탁드립니다.

qiiiiiiiip의 이미지

앱자체에서 파일을 통해서 100라인만 저장하는 것은
파일을 매번 모두 읽었다가 다시 쓰는 방법이 아닌 이상은
거의 불가능할 것 같습니다.

버퍼에 저장해두는 방법이라면 어차피 100라인만 쓸것 100라인만 저장하고 있으면 되겠지요.
그런데 에러 로그를 파일로 저장하는 것이 목적인데,
에러가 나서 정상종료가 안되는 경우도 있을텐데, 버퍼에 저장하고 있는게 의미가 없을 듯..

모든 예외처리가 고려가 되었다면 시도해볼 수는 있겠네요.
길이 100짜리 string queue를 유지하면 될듯.

정상적인 방법은 앱에서는 모든 로그를 파일에 뿌리고, 별도 프로그램이
백그라운드로 돌면서 지정크기보다 큰 로그파일을 정리해주는 방식입니다.

dongssim의 이미지

답변 감사합니다.

아래와 같이 처리했습니다.

에러를 화일에 기록하기전에 화일의 내용을 읽어 버퍼에 저장하고
화일을 지우고, 새로운 화일을 생성하여 새로 발생한 에러를 기록하고
그리고
버퍼에 저장해둔 내용을 99라인만 기록하는 것으로 했습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.