[완료] signal을 발생 시키면 문자열이 파일에 잘려서 들어갑니다.

visualplus의 이미지

c언어로 프로그램을 만들고 있는데 계속 파일에 기록을 하는 프로그램입니다.
이것을 1분단위로 기록하는 파일 이름을 바꾸고,
전에 기록했던 파일은 다시 다른 프로그램이 읽어서 처리를 하는 그런 것을 만들고 있는데요.

1분단위를 어떻게 할까 하다가 pidof로 pid값을 얻어와 sigint시그널을 날리는 스크립트를
crontab에서 1분마다 호출을 하도록 만들고,
파일에 기록하는 프로그램은 sigint시그널을 받도록 했습니다.

그런데, 거의 대부분 파일들이 끝에 몇글자씩 빠져있습니다.

대강 코드를 올리자면

void signal_flag_on()
{
    signal_flag = 1;
}
 
void signal_flag_off()
{
    signal_flag = 0;
}
 
void open_file()
{
    /* 현재 시간으로 파일이름을 정하고.. */
    /* fp는 전역변수입니다 */
    fp = fopen(filename, "a");
}
 
int main(int argc, char **argv)
{
    signal_flag_off();
 
    signal(SIGINT, signal_flag_on);
    /* 이 이후에는 계속 루핑을 돌면서 파일에 기록합니다.. */
    /* 파일은 전역변수 fp를 사용합니다. */
}

이런식으로 되어있습니다.
혹시 왜 이런 일이 생기는지 아시는분 안계신가요..

alwaysN00b의 이미지

언뜻 보기엔 fp를 close 하기전에 문제가 있는것 같네요. 코드를 올려주시면 영양가 있는 답변이 달릴것 같습니다.

언제나 시작

visualplus의 이미지

님 말씀이 맞는것 같습니다.
시그널을 보내고 바로 파일을 읽어서 그런것이었습니다^^
시그널 보내고 1초 대기한다음에 파일을 읽으니 제대로 읽혀지네요
감사합니다^^

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.