[問題] 請問回傳的問題?

作者: TouchAgain (謝謝)   2017-10-30 01:24:31
小弟正在學raspberry 由於之前沒接觸Linux系統
有個問題已經困擾小弟好幾個禮拜了
算是跟Linux的Virtual File System比較有關
就是在寫驅動程式的時候 裡面很多區塊都會寫到以下這個
ret = 某個函數()
然後最後會有個return ret
可是我一直搞不明白他要return(回傳)到哪裡去
有時侯譬如說read write的方法
我問過老師 他說在驅動程式裡的return值會先交給VFS處理
然後VFS轉換後再傳給應用程式
所以return的value在kernel看跟在應用程式看的不見得一樣
而且很困擾我的一點是 那個ret我在程式中看不到他需要被使用在其他任何地方
而且常常這段程式一個ret=()
下一段程式又是用相同變數ret=()使用在不同的函數做不一樣的事情
然後有時候要return ret, 但有時候又只return 0. 而且不知道要給誰用
記得以前在學C的時候 每個函數return值都有用意可能會被其他地方用到
所以對於return的想法沒什麼疑問 但這邊我真的搞不太懂這些回傳的意義是什麼
對於各位高手可能是很基本的東西
希望有高手能指點一下 謝謝
作者: Lipraxde (Lipraxde)   2017-10-30 08:13:00
告訴呼叫者自己有沒有正確執行完
作者: Bencrie   2017-10-30 09:03:00
去讀 API reference manual
作者: filiaslayers (司馬雲)   2017-10-30 10:04:00
原po是程式新手?
作者: galic (嘎利)   2017-10-30 10:26:00
你有注意到goto嗎哦我看懂你的問題了... 你沒有疑惑驅動的函式是誰呼叫的?或是怎麼被呼叫的
作者: filiaslayers (司馬雲)   2017-10-30 16:03:00
喔喔,看懂你的問題了orz
作者: galic (嘎利)   2017-11-03 12:29:00
感覺你想的怪怪的... manual說的回傳值是指copy_from_user呼叫之後的回傳值 0或非0代表copy_from_user有沒有成功執行不是說執行之後,你呼叫的函式還要另外回傳0或非0所以跟VFS什麼的都完全沒有關係這邊的 ret=len 是多餘的 跟你說的另外兩個寫法一致但這三種寫法有沒有差 也是編譯器先判定的 跟VFS也完全沒關而且這種kernel address space和user address space之間的資料搬移是涉及到memory management的設計 跟file system的VFS無關還是你想說 "virtual memory"
作者: seaseacola (sea)   2017-11-03 19:56:00
你的範例怪怪的. 看 kernel 使用 copy_from_user的其他 driver 應該就能理解
作者: galic (嘎利)   2017-11-04 21:16:00
我突然覺得你應該發在 LinuxDev 版之類的...總之 demo_write() 裡面呼叫的那些函式 都會有回傳值 只是看demo_write()裡面要怎麼處理 demo_write()本身的回傳值則是呼叫 demo_write() 的函式處理的... 所以你應該先知道誰會呼叫 demo_write() 以及呼叫 demo_write() 的函式預期demo_write() 回傳什麼結果給他這不管是不是kernel程式,而是跟一般 C 程式的概念都一致並不會因為今天是kernel程式就會有處理上面的不同
作者: TouchAgain (謝謝)   2017-11-04 22:41:00
好的 了解你的意思了 感謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com