<br><br><div class="gmail_quote">On Sun, Jul 17, 2011 at 4:52 PM, Bond <span dir="ltr">&lt;<a href="mailto:jamesbond.2k.g@gmail.com">jamesbond.2k.g@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

On Sun, Jul 17, 2011 at 9:17 PM, Anuz Pratap Singh Tomar<br>
<div><div></div><div class="h5">&lt;<a href="mailto:chambilkethakur@gmail.com">chambilkethakur@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Sun, Jul 17, 2011 at 4:40 PM, Bond &lt;<a href="mailto:jamesbond.2k.g@gmail.com">jamesbond.2k.g@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Jul 17, 2011 at 9:04 PM, Anuz Pratap Singh Tomar<br>
&gt;&gt; &lt;<a href="mailto:chambilkethakur@gmail.com">chambilkethakur@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Sun, Jul 17, 2011 at 4:10 PM, Bond &lt;<a href="mailto:jamesbond.2k.g@gmail.com">jamesbond.2k.g@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Tue, Jul 5, 2011 at 11:13 AM, Prashant Shah &lt;<a href="mailto:pshah.mumbai@gmail.com">pshah.mumbai@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; On Tue, Jul 5, 2011 at 9:45 AM, Bond &lt;<a href="mailto:jamesbond.2k.g@gmail.com">jamesbond.2k.g@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt; This is an interview question.<br>
&gt;&gt; &gt;&gt; &gt;&gt; My answer was<br>
&gt;&gt; &gt;&gt; &gt;&gt; In unix it simply opens the device node as a file and sends/receives<br>
&gt;&gt; &gt;&gt; &gt;&gt; data and commands from it.<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; A little more detailed method :<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Userland read/write to the file -&gt; Calls C Library read/write<br>
&gt;&gt; &gt;&gt; &gt; functions -&gt; Makes System Calls for read/write -&gt; (now inside kernel)<br>
&gt;&gt; &gt;&gt; &gt; -&gt; Process the system calls (check parameter, etc) -&gt; Refer the<br>
&gt;&gt; &gt;&gt; &gt; file_operations structure for that file -&gt; Call the corresponding<br>
&gt;&gt; &gt;&gt; &gt; read/write function.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; This is not correct.If you answer this in interview which I faced as I<br>
&gt;&gt; &gt;&gt; did not get that job even you will not.<br>
&gt;&gt; &gt;&gt; The answers on this mailing list did not helped.If you would have been<br>
&gt;&gt; &gt;&gt; in the interview and given these answers it will not work.<br>
&gt;&gt; &gt;&gt; Initially I posted the question on list I was expecting I missed some<br>
&gt;&gt; &gt;&gt; thing or interviewer was blabbering more.But I gave 2-3 more<br>
&gt;&gt; &gt;&gt; interviews<br>
&gt;&gt; &gt;&gt; and all of them asked me same and I gave the answers which I learned<br>
&gt;&gt; &gt;&gt; in this thread but I was not selected.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; This list is not an interview question answering mailing list.<br>
&gt;&gt; &gt; Not getting selected have nothing to do with answers being right or<br>
&gt;&gt; &gt; wrong.<br>
&gt;&gt; &gt; Being selected in an interview has a lot of other factors.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; Why do not you understand that this has nothing to my selection what I<br>
&gt;&gt; wanted to know is how does the app gets connected to device.And your<br>
&gt;&gt; rant does not help to understand.The answers given on this list are of<br>
&gt;&gt; very poor quality as usual.<br>
&gt;&gt; As an example you rather than answering some thing meaningful reproduced<br>
&gt;&gt; rant.<br>
&gt;<br>
&gt; Greg Freemyer answered your question with fine details. And the discussion<br>
&gt; that followed elaborated the point.<br>
&gt; But you say all that is NOT correct? on what basis did you say that?<br>
<br>
</div></div>I am reproducing what he answered<br>
<div class="im"><br>
And the interviewer was right! You fell short.  And so did everyone<br>
else in this thread.  I&#39;m very surprised at the poor answers this<br>
thread generated.  Maybe everyone should get a 20+ year old UNIX book<br>
an read it so they know the basic and classic mechanisms.<br>
<br>
My personal favorite old book was<br>
<br>
 &quot;The Magic Garden Explained: The Internals of Unix System V Release 4&quot;<br>
<br>
To my surprise Amazon has some copies.  New and used.  It&#39;s 20 years<br>
old, but it will give some historical pre-linux context.  Remember<br>
your interviewer is likely to be an old timer, so you need to be<br>
familiar with classical UNIX, not just bleeding edge Linux.   (Not<br>
that the answers showed familiarity with either, but the classic stuff<br>
should pop of people&#39;s minds without thought.)<br>
<br>
Back to the question<br>
<br>
read / write are &quot;data&quot; paths, not control/status/command paths. Yes,<br>
there are drivers that abuse read/write to handle commands, but they<br>
are the exception, not the rule.<br>
<br>
In general, read/write are termed in-band communications and using<br>
them to communicate with ta driver is discouraged.  The Linux kernel<br>
encourages out-of-band communications.<br>
<br>
</div><div class="im">Let me simplify the question.<br>
<br>
</div><div class="im">1) What are the FIVE classic system calls for interfacing with a<br>
character device.  (ie. If it did not exist in 1970, don&#39;t list it).<br>
<br>
</div><div class="im">2) Which of the 5 is still heavily used in the kernel but is<br>
discouraged for new drivers being accepted into the linux kernel?<br>
<br>
</div><div class="im">3) Name at least 3 alternatives that have been routinely used for<br>
out-of-band communication in the Linux kernel since 2000.<br>
<br>
</div><div class="im">Personally, anyone that can&#39;t answer those basic questions has failed<br>
a job interview in my mind.<br>
<br>
<br>
</div>Let me know what do you understand from this.<br>
<font color="#888888"><br>
--<br></font></blockquote><div><div class="gmail_quote"><div> </div><br></div></div></div>For one he is pointing out that there are more mechanism to interact with devices than just read/write.<br>When you open a device node, you do not have to necessarily read or write. In most cases its not ever required<br>

The drivers implement many methods like proc, ioctls, the new sysfs each of which can be directly read from or write to or pass some control/command. For example network drivers don&#39;t have device nodes, netlink interface or sockets is used to interact with them. <br>

Secondly he is pointing out the fact that some of the interfaces are being deprecated like sysfs will be used for most purpose as compared to proc. <br>In between this discussion, it was also pointed out that seek() call may not be useful for character drivers and its not one of the most important one. <br>

another way for interacting with kernel could be using mmap(). I do not exactly remember how it works, but it has been explained here on this list many times. <br><br>