[问题] 请问回传的问题?

楼主: 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