unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (HP-UX-11.11)
Page:
Section:
Apropos / Subsearch:
optional field



 fsctl(2)							    fsctl(2)




 NAME
      fsctl - file system control

 SYNOPSIS
      #include <&lt&lt&lt;sys/unistd.h>&gt&gt&gt;

      int fsctl(
	   int fildes,
	   int command,
	   void *outbuf,
	   size_t outlen
      );

 DESCRIPTION
      fsctl() provides access to file-system-specific information.  fildes
      is an open file descriptor for a file in the file system of interest.
      The possible values for command depend on the type of file system.
      Currently, defined commands exist only for the CDFS file system (see
      sys/cdfsdir.h).

      outbuf is a pointer to the data area in which data is returned from
      the file system.	outlen gives the length of the data area pointed to
      by outbuf.

      The CDFS commands are:

	   CDFS_DIR_REC	     Returns the directory record for the file or
			     directory indicated by fildes.  The record is
			     returned in a structure of type cddir, defined
			     in <sys/cdfsdir.h>.

	   CDFS_XAR	     Returns the extended attribute record, if any,
			     for the file or directory indicated by fildes.
			     Because the size of an extended attribute
			     record varies, be sure outbuf points to a data
			     area of sufficient size.  To find the necessary
			     size, do the following:

			     1.	  Use statfs(2).  to get the logical block
				  size of the CDFS volume.

			     2.	  Use an fsctl() call with the CDFS_DIR_REC
				  command to get the extended attribute
				  record size (in blocks) for the file or
				  directory of interest.  The mincdd_xar_len
				  field in the returned structure contains
				  the size of the extended attribute record
				  in logical blocks.  (If this field is
				  zero, the file or directory has no
				  extended attribute record.)




 Hewlett-Packard Company	    - 1 -   HP-UX Release 11i: November 2000






 fsctl(2)							    fsctl(2)




			     3.	  Multiply mincdd_xar_len by the logical
				  block size obtained in step 1 to get the
				  total space needed.

			     4.	  Once you get the extended attribute
				  record, cast outbuf into a pointer to a
				  structure of type cdxar_iso (defined in
				  <sys/cdfsdir.h>).  This enables you to
				  access those fields that are common to all
				  extended attribute records.  (See EXAMPLES
				  below for an example of this process.)

				  If the extended attribute record contains
				  additional system use or application use
				  data, that data will have to be accessed
				  manually.

	   CDFS_AFID	     Returns the abstract file identifier for the
			     primary volume whose root directory is
			     specified by fildes, terminated with a NULL
			     character.	 Note that the constant CDMAXNAMLEN
			     defined in <sys/cdfsdir.h> gives the maximum
			     length a file identifier can have.	 Thus,
			     CDMAXNAMLEN + 1 can be used for outlen and the
			     size of outbuf.

	   CDFS_BFID	     Returns the bibliographic file identifier for
			     the primary volume whose root directory is
			     specified by fildes, terminated with a NULL
			     character.	 CDMAXNAMLEN + 1 can be used for the
			     value of outlen and the size of outbuf.

	   CDFS_CFID	     Returns the copyright file identifier for the
			     primary volume whose root directory is
			     specified by fildes, terminated with a NULL
			     character.	 CDMAXNAMLEN + 1 can be used for the
			     value of outlen and the size of outbuf.

	   CDFS_VOL_ID	     Returns the volume ID for the primary volume
			     specified by fildes, terminated with a NULL
			     character.	 The maximum size of the volume ID
			     is 32 bytes, so a length of 33 can be used for
			     outlen and the size of utbuf.

	   CDFS_VOL_SET_ID   Returns the volume set ID for the primary
			     volume specified by fildes, terminated with a
			     NULL character.  The maximum size of the volume
			     set ID is 128 bytes, so a length of 129 can be
			     used for outlen and the size of outbuf.





 Hewlett-Packard Company	    - 2 -   HP-UX Release 11i: November 2000






 fsctl(2)							    fsctl(2)




 EXAMPLES
      The following code fragment gets the extended attribute record for a
      file on a CDFS volume.  The filename is passed in as the first
      argument to the routine.	Note that error checking is omitted for
      brevity.

	   #include <&lt&lt&lt;sys/types.h>&gt&gt&gt;
	   #include <&lt&lt&lt;sys/vfs.h>&gt&gt&gt;
	   #include <&lt&lt&lt;fcntl.h>&gt&gt&gt;
	   #include <&lt&lt&lt;sys/cdfsdir.h>&gt&gt&gt;

	   main(argc, argv)
	   int argc;
	   char *argv[];
	   {
	      int fildes, size = 0;
	      char *malloc(), *outbuf;
	      struct statfs buf;
	      struct cddir cdrec;
	      struct cdxar_iso *xar;
		      .
		      .
		      .
	      statfs(argv[1], &&amp&amp&amp;buf);   /* get logical block size */

	      fildes = open(argv[1], O_RDONLY);	 /* open file arg */

	      /* get directory record for file arg */
	      fsctl(fildes, CDFS_DIR_REC, &&amp&amp&amp;cdrec, sizeof(cdrec));

	      size = buf.f_bsize * cdrec.cdd_min.mincdd_xar_len;   /* compute size */

	      if(size) {   /* if size != 0 then there is an xar */
	      outbuf = malloc(size);   /* malloc sufficient memory */

	      fsctl(fildes, CDFS_XAR, outbuf, size);  /* get xar */

	      xar = (struct cdxar_iso *)outbuf;	 /* cast outbuf to access fields */
		      .
		      .
		      .
	      }
		 .
		 .
		 .
	   }

 RETURN VALUE
      fsctl() returns the number of bytes read if successful.  If an error
      occurs, -1 is returned and errno is set to indicate the error.




 Hewlett-Packard Company	    - 3 -   HP-UX Release 11i: November 2000






 fsctl(2)							    fsctl(2)




 ERRORS
      fsctl() fails if any of the following conditions are encountered:

	   [EBADF]	  fildes is not a valid open file descriptor.

	   [EFAULT]	  outbuf points to an invalid address.

	   [ENOENT]	  The requested information does not exist.

	   [EINVAL]	  command is not a valid command.

	   [EINVAL]	  fildes does not refer to a CDFS file system.

 SEE ALSO
      statfs(2), cdfs(4), cdfsdir(4), cdnode(4), cdrom(4).







































 Hewlett-Packard Company	    - 4 -   HP-UX Release 11i: November 2000