Hi Muli,

I'll answer the your last question first: What I'm doing is basically a general-purpose connection between a hardware FIFO within an FPGA and a device file in Linux, with PCI Express as the data transport. That's why I don't know if data will be coming constantly or in small drops into the FIFO. I don't know if the user wants to use fread() or similar to read chunks, or fgets()/fscanf() to get records of data.


And most of all: I want this to work out of the box, even if the programmer and/or user is, how shall I put it, of the less qualified type. The less pitfalls, the better.


But it's more like a socket, anyhow. Or a pipe.


And I know about O_NONBLOCK, of course, and I'm going to support it. But that doesn't solve the "less qualified" issue. And still, we're left with the question of whether an O_NONBLOCK call should return zero or some bytes of data when it can't fulfill the entire request. I mean, strictly speaking, O_NONBLOCK only tells the driver not to block, but it doesn't say "give me what you have". Even though I would make the latter interpretation.


  Eli


Muli Ben-Yehuda wrote:

On Fri, Apr 22, 2011 at 01:31:02PM +0300, Eli Billauer wrote:
There are a couple of ways you could look at it. First, ask yourself
is the package user more likely to treat this as a file or a socket?
And if a file, is it a structured file or a certain size, or is it a
file whose contents are not known in advance? Then make your read
behave the same way a read on such a file or socket would behave. I
don't like this option, personally, because it makes assumptions about
the user.

The second way is to just support both modes of operation. Check if
you were opened with O_NONBLOCK. If yes, don't ever block -- you are
allowed to return -EAGAIN if you would otherwise block. If you were
not opened with O_NONBLOCK, then blocking is allowed, and you can wait
until you have a full quantum of data to return at once.

Just out of curiosity -- what does the hardware do?

Cheers,
Muli




--
Web: http://www.billauer.co.il

_______________________________________________
Haifux mailing list
[email protected]
http://hamakor.org.il/cgi-bin/mailman/listinfo/haifux

Reply via email to