[問題] linux c抓取時間的問題

看板C_and_CPP作者 (JimmyChung)時間14年前 (2011/09/13 07:37), 編輯推噓0(0027)
留言27則, 4人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) uClinux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 沒有 問題(Question): 各位大大,小弟因為現在要在linux上寫一個在我要的時間點,把資料寫到txt檔裡,我己經 寫好了,但因為我放到設備上時,如果手動啟動我寫的這隻程式,都沒有問題,但如果我加到 ini檔(開機時,會去自動執行的程式),就會有問題.程式執行到我設的那個時間點時,會進 入到zombie的狀態?人家是說我沒有按linux的邏輯下去寫程式才會這樣. 以下是我的程式碼,想請問什麼是按linux的邏輯 char time_buf[9]; struct tm *nowtime; int lock_flag = 0; void main(void) { time_t long_time; FILE *my_File; while(1) { time( &long_time ); nowtime = localtime( &long_time ); Sleep(1); if( ( nowtime->tm_hour ) == 0) && ( nowtime->tm_min ) == 0) ) { if( lock_flag == 0 ) { sprintf( buf, "%d/%d/%d-%d:%d\n", ... ); //這裡是把時間寫到buf my_File = fopen( "./backup.txt", "a+" ); fprintf( my_File, "%s", buf ); fclose( my_File ); lock_flag = 1; } }else{ lock_flag = 0; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.11.102

09/13 15:41, , 1F
不好意思,我在時間判斷那KEY錯了,我是判斷00:00才對.
09/13 15:41, 1F

09/13 15:42, , 2F
多了"%2"
09/13 15:42, 2F

09/13 16:01, , 3F
一般在做排程時,大多都是配合os之 shell/cmd 去做排程
09/13 16:01, 3F

09/13 16:02, , 4F
windows 是at, linux 記得有 Crontab / atd / at
09/13 16:02, 4F

09/13 16:02, , 5F
而用 c 寫的那部份,是完全不管時間的..
09/13 16:02, 5F

09/13 16:58, , 6F
大大因為我的uclinux裡沒有Crontab/atd/at這些指令
09/13 16:58, 6F

09/13 16:59, , 7F
所以我只能用c寫一隻程式去判斷時間,用它裡面的一個ini檔
09/13 16:59, 7F

09/13 16:59, , 8F
開機時,去自動執行我的這隻程式
09/13 16:59, 8F

09/13 17:30, , 9F
喔,理解你要幹麼了.你要在00:00時實行某些事情
09/13 17:30, 9F

09/13 17:31, , 10F
但是你沒設終止條件,而且你忘記考慮tm_sec<--你這樣至少
09/13 17:31, 10F

09/13 17:31, , 11F
會執行很多次喔
09/13 17:31, 11F

09/13 17:36, , 12F
angleevil大大,所以我有設lock_flag,在00:00時,進去時
09/13 17:36, 12F

09/13 17:37, , 13F
會把lock_flag設為1,等到時間過了00:00,再把lock_flag清
09/13 17:37, 13F

09/13 17:38, , 14F
空. **剛發現else裡的lock_flag打錯了,第一次用,錯誤真多
09/13 17:38, 14F

09/13 17:45, , 15F
去按E修改好,我被弄混亂了
09/13 17:45, 15F
※ 編輯: jimmycch 來自: 114.32.11.102 (09/13 18:29) 各位大大,請問一下,因為我現在的uclinux無法重新build kernel,想請問一下,有沒有 辦法在不重build kernel的狀態下,加上crontab / atd / at的辦法? ※ 編輯: jimmycch 來自: 114.32.11.102 (09/15 18:12)

09/15 21:18, , 16F
?.?
09/15 21:18, 16F

09/16 15:16, , 17F
fopen 後把 my_File 印出來看是否為 nil.
09/16 15:16, 17F

09/16 15:17, , 18F
開機期間, 目錄可能仍為唯讀.
09/16 15:17, 18F

09/16 15:18, , 19F
另外, buf 大小多大? 如果是上面的 time_buf, 那就太小了.
09/16 15:18, 19F

09/16 15:23, , 20F
如果連印都還沒印就死了, 那有可能執行檔路徑問題,
09/16 15:23, 20F

09/16 15:25, , 21F
或缺少什麼 lib, 需要編譯成 static linked execution file.
09/16 15:25, 21F

09/16 15:39, , 22F
你用 uclinux 沒有使用 busybox 嗎? crontab 在其編譯選項中.
09/16 15:39, 22F

09/16 15:42, , 23F
另外, 剛開機, 還未使用 hwclock 讀出 RTC 時間前,
09/16 15:42, 23F

09/16 15:45, , 24F
時間是從 1970-01-01 或 2000-01-01 的零時起算的.
09/16 15:45, 24F

09/16 15:47, , 25F
所以開機時執行, 很可能還在 00:00, 就進去 fopen 那段了.
09/16 15:47, 25F
yvb大大,謝謝你的講解,busybox我有用過,但它裡沒有編進去,廠商也不教我, 想請問我可以只重編busybox嗎?而不去動到uclinux嗎? ※ 編輯: jimmycch 來自: 61.217.232.238 (09/17 22:56)

09/22 17:58, , 26F
busybox 跟你寫的程式一樣是應用程式, 而非 kernel 的一部分.
09/22 17:58, 26F

09/22 17:59, , 27F
所以有何不可?
09/22 17:59, 27F
文章代碼(AID): #1ERmWtfZ (C_and_CPP)
文章代碼(AID): #1ERmWtfZ (C_and_CPP)