2011-01-16 3 views
1

특정 시간에 신청서를 제출해야합니다. 나는 옥수수 일에 집착하고 싶지 않다. 내 실행 파일은 응용 프로그램이며 2011 년 1 월 20 일부터 시작합니다. 그래서 실행해야합니다. ./app -date 2011-Jan-20잠시 기다려주십시오.

문제는 다음과 같은 시간 차이를 계산하는 방법입니다. 현재 및 날짜가 명령 행 옵션으로 제공됩니다.

원 기능을 쓰고 싶지 않습니다. 그런 종류의 시간차에 사용할 수있는 빌드 기능이 있습니까? (C 및 Linux)

+2

내가 원하는 것을 완전히 이해하고 있는지 잘 모르겠습니까? 지금 명령을 실행할 수있는 코드를 작성하려고하지만 타이머를 사용하여 시작 시점을 알 수 있습니까? 크론 시스템의 문제점은 무엇입니까? 정말 잘 작동하는 테스트되고 검증 된 시스템입니다. – jmort253

+1

당신이 왜 * cron을 사용하기를 원하지 않는지 설명 할 수 있다면 사람들은 당신의 질문에 더 잘 대답 할 수있을 것입니다. – Tony

+2

아마'man at '이 당신에게 유용 할 수 있습니다. – Benoit

답변

1

시작 시간과 현재 밀리 초의 차이를 계산 한 다음 해당 시간 (밀리 초 단위)을 select() 또는 epoll()으로 제한 시간 인수로 전달하여 대기 시간을 기다릴 수 있습니다.

차이를 계산하려면, 하나의 방법은 먼저 strptime()를 사용 struct tm에 날짜 문자열로 변환 한 후 유닉스 시대 1970-01-01 00:00 이후 당신에게 (초)을 제공하는 것입니다 mktime()에 전달하는 것입니다 : 00. 그런 다음 gettimeofday() 또는 clock_gettime()을 사용하여 현재 시간을 가져 오면 유닉스 시대 이후로 경과 된 시간도보고됩니다. 시작 시간과 현재 시간을 초로 변환하고 값을 뺍니다.

+0

최신 커널에서는이 접근법과 함께 [timerfd] (http://www.kernel.org/doc/man-pages/online/pages/man2/timerfd_create.2.html)를 사용해야합니다. –

+0

@Sam :'timerfd()'는 좋은 기능이지만 꼭 필요한 것은 아닙니다. http://monkey.org/~provos/libevent/와 같은 이벤트 디 멀티플렉싱 라이브러리는 보통 가장 빠른 타이머 만기 또는 파일 설명자 준비 또는 신호까지 대기하도록'select()'에 타임 아웃 인수를 사용합니다. 즉, 구현 단계에서 모든 타이머를 동시에 기다리지 않고 가장 빠른 타이머까지만 예약 할 필요가 없습니다. –

4

나는 당신이 C 대답을 기대하고 있지만,이 당신에게 관심을 가질만한 알고 at

:

당신이 리눅스에있어 때문에, 시스템은 이미 ponctual 작업을 예약 할 수있는 효율적인 방법을 제공합니다 귀하의 경우, 오전 8시에서 20.01.2011에 자신의 작업을 실행하려는 것 인 사용자에

, 그냥 입력합니다 :

echo "./app" | at 08:00 20.01.2011 

작업은 사용자의 자격 증명을 사용하여 실행됩니다. atat now +1 day과 같은 상대 시간 지시문을 허용합니다. 기본적으로 대부분의 Linux 배포판과 함께 제공되는 강력한 도구입니다.

atq 

을 그리고 당신은 심지어 사용하여 예약 된 작업을 제거 할 수 있습니다 :

예약 된 작업의 목록은 사용하여 얻을 수있는이 도움이

atrm 

희망을.

+2

실제로 존재하지 않는 문제를 해결하거나 바퀴벌레를 재발견하는 이유는 무엇입니까? 나는 그 사람이 당신의 대답을 받아 들여야한다고 생각합니다. 이것은 알고있는 것이 좋다! – jmort253

관련 문제