[問題] 如何讀取外部傳進來的參數?

看板C_and_CPP作者 (非常念舊)時間7年前 (2016/08/09 20:17), 7年前編輯推噓16(16022)
留言38則, 15人參與, 最新討論串1/3 (看更多)
我知道在 main(int argc, char*argv){ } 可以傳外部參數進去例如 xxx.exe "參數" 但如果我在 main 裡面有一個無窮迴圈 while while 裡面我該如何獲得外面傳進來的參數呢??(假設這個無窮迴圈不能read file) 短時間內想不出來="= 謝謝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.69.181 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1470745062.A.83C.html

08/09 20:20, , 1F
你在供三小?
08/09 20:20, 1F

08/09 20:20, , 2F
polling i/o?
08/09 20:20, 2F

08/09 20:23, , 3F
read file 是我想到的方法,就是S大想到的polling io
08/09 20:23, 3F

08/09 20:24, , 4F
可我是在 android 系統內的底層,無法讀取file
08/09 20:24, 4F

08/09 20:28, , 5F
polling (void**)變數
08/09 20:28, 5F

08/09 20:35, , 6F
socket programming? bind() accept() recv()
08/09 20:35, 6F

08/09 20:36, , 7F
請問S大,那這個程式的外部該如何指定到這個變數呢?
08/09 20:36, 7F

08/09 20:38, , 8F
假設我要從這個程式傳"adc"這個參數進來
08/09 20:38, 8F
Sidney0503: 你的外面是多外面? 用網路傳如何? 08/09 20:41 抱歉~"~ 簡單就是說我一個 daemon 執行檔要去接參數,來使daemon做不同的行為 但我的daemon裡面有一個while迴圈,我一執行 daemon 他就會停在 cmdline 不能打指令,所以我的daemon 只能接受一次參數 ※ 編輯: gn00618777 (61.220.69.181), 08/09/2016 20:45:25

08/09 20:52, , 9F
吃中斷嗎 中斷去讀個參數再回去
08/09 20:52, 9F

08/09 20:52, , 10F
這已經是系統等級的設計 command buffer?
08/09 20:52, 10F

08/09 21:09, , 11F
開thread 用event loop 配callback
08/09 21:09, 11F

08/09 21:11, , 12F
講一個最簡單的 開一個thread放你的loop
08/09 21:11, 12F

08/09 21:12, , 13F
設一個flag book new_input
08/09 21:12, 13F

08/09 21:12, , 14F
你外面有讀到東西就把flag改掉 這夠簡單了吧
08/09 21:12, 14F

08/09 21:21, , 15F
我喜歡樓上這個方法
08/09 21:21, 15F

08/09 21:31, , 16F
既然都說是 daemon 了就不要管參數, 先決定你要怎麼送東西
08/09 21:31, 16F

08/09 21:31, , 17F
給這個 daemon 再來決定要怎麼讀
08/09 21:31, 17F

08/09 21:32, , 18F
其實就是 Sidney 在問的「你的外面是多外面」
08/09 21:32, 18F

08/09 21:32, , 19F
之所以不要管參數是因為參數只是啟動在用
08/09 21:32, 19F

08/09 21:33, , 20F
不就pipe嗎
08/09 21:33, 20F

08/09 21:33, , 21F
而你這是 daemon 是會一直接受外面的要求來做事的
08/09 21:33, 21F

08/09 21:46, , 22F
不考慮socket嗎?很直覺得不就是用socket解決?
08/09 21:46, 22F

08/09 22:04, , 23F
透過 flag 得記得加 memory barrier 避免 CPU 亂序執行
08/09 22:04, 23F

08/09 22:05, , 24F
也可考慮註冊 SIGUSR1 之類的 signal,在 handler 改值
08/09 22:05, 24F

08/09 23:26, , 25F
named pipe 也許簡單一點 XD
08/09 23:26, 25F

08/09 23:29, , 26F
你需要的是ipc(inter process communication)
08/09 23:29, 26F

08/10 09:06, , 27F
ide ? os ?
08/10 09:06, 27F

08/10 09:46, , 28F
樓上不專心。
08/10 09:46, 28F

08/10 10:20, , 29F
linux IPC fifo ,但原po沒說平台阿
08/10 10:20, 29F

08/10 10:56, , 30F
...樓上好多想法,我現在先用另一隻程式寫入參數到
08/10 10:56, 30F

08/10 10:56, , 31F
device node,最後再由主程式將資料讀出來...
08/10 10:56, 31F

08/10 10:56, , 32F
我的平台是 linux
08/10 10:56, 32F

08/10 10:57, , 33F
感謝各位給我意見,我會慢慢來try,東西先有出來再說
08/10 10:57, 33F

08/10 20:07, , 34F
東西出來後可以上來分享嗎?我對這很有興趣
08/10 20:07, 34F

08/10 21:56, , 35F
android的話可以參考libsysutils的FrameworkListener
08/10 21:56, 35F

08/10 21:56, , 36F
一個典型的Linux socket封裝
08/10 21:56, 36F

08/11 01:08, , 37F
也可考慮 boost::interprocess::message_queue
08/11 01:08, 37F

08/11 16:45, , 38F
其實可以找 APUE 來看
08/11 16:45, 38F
文章代碼(AID): #1NgSdcWy (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1NgSdcWy (C_and_CPP)