From: Eric H. <eri...@gm...> - 2006-06-24 01:27:34
|
Hello everyone, 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. 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. 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. Thanks for your help, and great work on FUSE! -Eric |
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 |