From: Miklos S. <mi...@sz...> - 2006-06-26 09:05:45
|
> I'm trying to use FUSE for some software that emulates hardware devices. > Originally I was going to have my program make a bunch of FIFO's can other > programs could open, pretending they were device nodes. This didn't work > because I need bidirectional communication, so I found FUSE and thought it > would probably be able to do what I need. > > Unfortunately I'm running in to some issues. What I would like is for my > program to create a bunch of character specials that another program can > open and then read and write to. All the data read by the client is put > there by my program, and all the data written by the client is then read by > my program. I tried making a character special, which some major and minor > number, but when I try to read from that file I get permission denied. > Watching the debugging output from my program never even shows an OPEN > request, only a LOOKUP. That's because I/O on all special files (fifo, socket, char/block device) is handled by the kernel. The solution is just to create a regular file, and set the 'direct_io' flag in fuse_file_info in the open() method. > I have a hunch that the kernel probably intercepts all attempts to open a > special file, which is why I'm not seeing it. Still, in this case if I set > my major and minor number to 1, 9, I would expect to read random data from > that file, since that is the device id for /dev/urandom. Exactly. > Is what I'm trying to do possible? How might I approach this? I tried > using FIFO's as well, but when I read from these, nothing happens, and again > I never see an OPEN request on the FUSE output. I had some success with > regular files, but I'd rather not have to keep track of the file size and > such. Yeah, that's what 'direct_io' is for, you'll get all read/write requests regardless of st_size. Miklos |