// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.6.0" ), 
    UMLPackagePath ( "CIM::System::Unix" ), 
    Description ( 
       "The UnixFile class holds properties that are valid for various "
       "subclasses of LogicalFile, in a Unix environment. This is "
       "defined as a separate and unique class since it is applicable "
       "to Unix files, directories, etc. It is associated via a "
       "FileIdentity relationship to these subclasses of LogicalFile. "
       "Unless this approach of creating and associating a separate "
       "class is used, it is necessary to subclass each of the "
       "inheritance hierarchies under LogicalFile, duplicating the "
       "properties in this class. The referenced _PC* and _POSIX* "
       "constants are defined in unistd.h. Some properties indicate "
       "whether the UNIX implementation support a feature such as "
       "asynchronous I/O or priority I/O. If supported, sysconf "
       "returns the value as defined in the appropriate header file "
       "such as unistd.h. If a feature is not supported, then pathconf "
       "returns a -1. In this case, the corresponding property should "
       "be returned without any value." )]
class CIM_UnixFile : CIM_LogicalElement {

      [Key, Description ( 
          "The scoping ComputerSystem\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_LogicalFile.CSCreationClassName" )]
   string CSCreationClassName;

      [Key, Description ( "The scoping ComputerSystem\'s Name." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_LogicalFile.CSName" )]
   string CSName;

      [Key, Description ( 
          "The scoping FileSystem\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_LogicalFile.FSCreationClassName" )]
   string FSCreationClassName;

      [Key, Description ( "The scoping FileSystem\'s Name." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_LogicalFile.FSName" )]
   string FSName;

      [Key, Description ( 
          "The scoping LogicalFile\'s CreationClassName." ), 
       MaxLen ( 256 ), 
       Propagated ( "CIM_LogicalFile.CreationClassName" )]
   string LFCreationClassName;

      [Key, Description ( "The scoping LogicalFile\'s Name." ), 
       MaxLen ( 1024 ), 
       Propagated ( "CIM_LogicalFile.Name" )]
   string LFName;

      [Required, Description ( 
          "An Identifer that uniquely describes the owner of this file."
           )]
   string UserID;

      [Required, Description ( 
          "An identifier that describes the group that owns this file."
           )]
   string GroupID;

      [Description ( 
          "Indicates restricted deletion for directories, or "
          "possible implementation defined properties for "
          "executable files. For directories this is known as the "
          "sticky bit." )]
   boolean SaveText;

      [Description ( "Count of the number of names for this file." ), 
       Counter]
   uint64 LinkCount;

      [Description ( "File Inode number, as printed by \"ls -i\"." ), 
       MappingStrings { "UNIX.TOG|ls -i" }]
   string FileInodeNumber;

      [Description ( 
          "Indicates whether the associated file has setuid permissions."
           )]
   boolean SetUid;

      [Description ( 
          "Indicates whether the associated file has setgid permissions."
           )]
   boolean SetGid;

      [Description ( 
          "The time that the Inode was last modified. This includes "
          "the Inode creation time, state modification, and etc." )]
   datetime LastModifiedInode;

      [Description ( "Maximum number of links to a single file." ), 
       MinValue ( 8 ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_LINK_MAX" }]
   uint64 LinkMax;

      [Description ( 
          "Maximum number of bytes in a filename, not including "
          "terminating null." ), 
       Units ( "Bytes" ), 
       MinValue ( 14 ), 
       MappingStrings { "POSIX.TOG|pathconf|_POSIX_NAME_MAX" }, 
       PUnit ( "byte" )]
   uint64 NameMax;

      [Description ( 
          "Maximum number of bytes in a pathname, including the "
          "terminating null character." ), 
       Units ( "Bytes" ), 
       MinValue ( 255 ), 
       MappingStrings { "POSIX.TOG|pathconf|_POSIX_PATH_MAX" }, 
       PUnit ( "byte" )]
   uint64 PathMax;

      [Description ( 
          "The use of chown() is restricted to a process with "
          "appropriate privileges. chown() is used to change the "
          "group ID of a file. The group ID can be changed to the "
          "effective group ID or one of its supplementary group "
          "IDs." ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_CHOWN_RESTRICTED" }]
   uint64 PosixChownRestricted;

      [Description ( 
          "Indicates whether pathname components longer than "
          "NameMax generate an error." ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_NO_TRUNC" }, 
       ModelCorrespondence { "CIM_UnixFile.NameMax" }]
   uint64 PosixNoTrunc;

      [Description ( 
          "Indicates whether asynchronous input or output "
          "operations may be performed for the associated file." ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_ASYNC_IO" }]
   uint64 PosixAsyncIo;

      [Description ( 
          "Indicates whether prioritized input or output operations "
          "may be performed for the associated file." ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_PRIO_IO" }]
   uint64 PosixPrioIo;

      [Description ( 
          "Indicates whether synchronised input or output "
          "operations may be performed for the associated file." ), 
       MappingStrings { "POSIX.TOG|pathconf|_PC_SYNC_IO" }]
   uint64 PosixSyncIo;


};
