open_mode
Joel Sherrill
joel.sherrill at OARcorp.com
Mon Feb 11 14:21:56 UTC 2002
Pattara Kiatisevi wrote:
>
> Thank you for fast response. At first, I did use the O_WRONLY flag but I
> couldn't find the definition of O_WRONLY anywhere in the RTEMS source
> (hmm, maybe I missed it somehow) so I happened to see
RTEMS uses newlib for many/most of the standard POSIX/ISO C library
headers. It is included in the toolset RPMs and should be
at something like /opt/rtems/CPU-rtems/include/sys/fcntl.h
> #define LIBIO_FLAGS_WRITE 0x0004 /* writing */
>
> in the libio.h so I tried directly the value of "4" :-p
The standard name flags are converted into those which was strictly
internal flags.
> So it works now (with O_WRONLY) but I have to define it manually in my
> application code (#define O_WRONLY 1). A better way is possible?
#include <sys/fcntl.h> should work here just liek on UNIX. Make
sure you are including everything the open man page says to.
> Regards,
> Pattara
>
> On Mon, 11 Feb 2002, Joel Sherrill wrote:
>
> >
> >
> > Pattara Kiatisevi wrote:
> > >
> > > Hi,
> > >
> > > I'm working further on my sound driver in the sound_open() function.
> > > >From application code I do:
> > >
> > > audio_fd = open("/dev/dsp", 4, 1)
> >
> > I think it was bogus to pass a 4 as the flags arg to open.
> > You should use the constants O_RDONLY, O_WRONLY, O_RDWR per
> > POSIX and ISO C. In this particular case, a 4 does not appear
> > to map to anything. From sys/fcntl.h
> >
> > #define O_RDONLY 0 /* +1 == FREAD */
> > #define O_WRONLY 1 /* +1 == FWRITE */
> > #define O_RDWR 2 /* +1 == FREAD|FWRITE */
> >
> > Also passing the 3rd parameter is bogus because you are not
> > creating the file /dev/dsp. Even if you did, using a 1 is
> > also not cool and you should use the appropriate S_ constants.
> >
> >
> >
> > > And then in the driver code:
> > >
> > > rtems_device_driver sound_open(
> > > rtems_device_major_number major,
> > > rtems_device_minor_number minor,
> > > void * arg
> > > )
> > > {
> > > rtems_libio_open_close_args_t *args = arg;
> > >
> > > /* Only write-only mode is supported now */
> > > printf("args->flags is 0x%4X\n", args->flags);
> > > printf("args->mode is 0x%4X\n", args->mode);
> > > if ( args->flags == 0x0004 ) {
> > > printf("/dev/dsp opened...\n");
> > > return RTEMS_SUCCESSFUL;
> > > } else {
> > > return RTEMS_NOT_IMPLEMENTED;
> > > }
> > >
> > > Hmm, but amazing (to me) is that the debugged output said:
> > >
> > > args->flags is 0x 103
> > > args->mode is 0x 1
> > > /dev/dsp: Permission denied
> > >
> > > Hmm, the flag I sent was "4" or "0x0004" but how could it become 0x103?
> > > Anybody has idea?
> >
> > It is a bad idea to use numeric constants. POSIX defined symbols for
> > a reason. :)
> >
> > > Thank you,
> > > Pattara}
> > >
> > > The best things in life are free. - B.G. DeSilva (1927)
> > > ----------------------------------------------------------------------
> > > Ott Pattara Kiatisevi T L W G
> > > M.Sc. INFOTECH Student, Stuttgart, Germany http://linux.thai.net/
> > > ----------------------------------------------------------------------
> >
> > --
> > Joel Sherrill, Ph.D. Director of Research & Development
> > joel at OARcorp.com On-Line Applications Research
> > Ask me about RTEMS: a free RTOS Huntsville AL 35805
> > Support Available (256) 722-9985
> >
> >
--
Joel Sherrill, Ph.D. Director of Research & Development
joel at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list