請問回傳的問題? - Linux

Table of Contents

小弟正在學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的想法沒什麼疑問 但這邊我真的搞不太懂這些回傳的意義是什麼
對於各位高手可能是很基本的東西
希望有高手能指點一下 謝謝

--

All Comments

Kama avatarKama2017-11-03
告訴呼叫者自己有沒有正確執行完
Joe avatarJoe2017-11-07
去讀 API reference manual
Kama avatarKama2017-11-08
原po是程式新手?
Emily avatarEmily2017-11-11
你有注意到goto嗎
Caitlin avatarCaitlin2017-11-12
哦我看懂你的問題了... 你沒有疑惑驅動的函式是誰呼叫的?
或是怎麼被呼叫的
Odelette avatarOdelette2017-11-14
喔喔,看懂你的問題了orz
Rachel avatarRachel2017-11-15
感覺你想的怪怪的... manual說的回傳值是指copy_from_user
Michael avatarMichael2017-11-18
呼叫之後的回傳值 0或非0代表copy_from_user有沒有成功執行
Hedda avatarHedda2017-11-21
不是說執行之後,你呼叫的函式還要另外回傳0或非0
Wallis avatarWallis2017-11-22
所以跟VFS什麼的都完全沒有關係
Kyle avatarKyle2017-11-25
這邊的 ret=len 是多餘的 跟你說的另外兩個寫法一致
但這三種寫法有沒有差 也是編譯器先判定的 跟VFS也完全沒關
Noah avatarNoah2017-11-28
而且這種kernel address space和user address space之間的
Gilbert avatarGilbert2017-11-28
資料搬移是涉及到memory management的設計 跟file system的
Necoo avatarNecoo2017-11-29
VFS無關
Anonymous avatarAnonymous2017-11-30
還是你想說 "virtual memory"
Hardy avatarHardy2017-12-04
你的範例怪怪的. 看 kernel 使用 copy_from_user
的其他 driver 應該就能理解
Suhail Hany avatarSuhail Hany2017-12-05
我突然覺得你應該發在 LinuxDev 版之類的...
Charlotte avatarCharlotte2017-12-07
總之 demo_write() 裡面呼叫的那些函式 都會有回傳值 只是
看demo_write()裡面要怎麼處理 demo_write()本身的回傳值
Ethan avatarEthan2017-12-10
則是呼叫 demo_write() 的函式處理的... 所以你應該先知道
誰會呼叫 demo_write() 以及呼叫 demo_write() 的函式預期
demo_write() 回傳什麼結果給他
Brianna avatarBrianna2017-12-10
這不管是不是kernel程式,而是跟一般 C 程式的概念都一致
並不會因為今天是kernel程式就會有處理上面的不同
Annie avatarAnnie2017-12-10
好的 了解你的意思了 感謝!