0.504 2023-11-28
  [Incompatible Changes]
    * Remove the set method in the Sys::Select::Fd_set class.
  [New Features]
    * Add Sys::Time::Util class.
    * Add the clone method to the Sys::Select::Fd_set class.
0.503 2023-11-28
  [Bug Fix]
    * Fix a bug that the compilation of the Sys::IO::Dirent failed becuase cygwin do not have d_reclen in struct dirent.
  [New Features]
    * Add the d_off method to the Sys::IO::Dirent class.
    * Add the d_type method to the Sys::IO::Dirent class.
    * Add the utimes method to the Sys::IO class.
    * Add the optional $tv_sec and $tv_usec arguments to the new method in the Sys::Time::Timeval.
    * Add the optional $tv_sec and $tv_nsec arguments to the new method in the Sys::Time::Timespec.
  [Incompatible Changes]
    * The getgroups method in the Sys::User class is changed.
      [Before]
      static method getgroups : int[] ();
      [After]
      static method getgroups : int ($size : int, $list : int[]);
    * The definition of the pipe method in the Sys is changed.
      [Before]
      static method pipe : void ($pipe_fds : int[]);
      
      [After]
      static method pipe : void ($read_fd_ref : int*, $write_fd_ref : int*);
      
    * The definition of the select method in the Sys is changed.
      [Before]
      static method select : int ($readfds : Sys::Select::Fd_set, $writefds : Sys::Select::Fd_set, $exceptfds : Sys::Select::Fd_set, $timeout : Sys::Time::Timeval);
      
      [After]
      static method select : int ($readfds : Sys::Select::Fd_set, $writefds : Sys::Select::Fd_set, $exceptfds : Sys::Select::Fd_set, $timeout : double = 0);
      
0.502 2023-11-23
  [New Features]
    * Add the _putenv_s method to the Sys::Env class.
    * Add the set_env method to the Sys class.
    * Add the alarm method to the Sys class.
    * The kill method in the Sys class can be used in Windows if $pid is equal to the current process id.
  [Incompatible Changes]
    * Remove the Sys::FileTest class.
    * Remove throwing exceptions in the ualarm method in the Sys::Signal class.
    * Remove the signal_go method in the Sys::Signal class.
  [Bug Fix with Incompatible Changes]
    * The S method in the Sys class returns 0 if the file do not exists.
0.501 2023-11-23
  [Incompatible Changes]
     * The return type of the following methods in the Sys become void.
      chdir
      chmod
      mkdir
      rmdir
      opendir
      closedir
      close
      unlink
      rename
      bind
      listen
      connect
      shutdown
      socketpair
      setsockopt
      truncate
      flock
      print
      say
      printf
      seek
      utime
      chown
      open
      fdopen
      sysopen
      say
      kill
      pipe
       

0.500 2023-11-17
  [New Features and Incompatible Changes]
    * Rename the SIG_IO method in the Sys::Signal class is renamed to SIG_GO.
    * Change the signal_io method in the Sys::Signal class is renamed to signal_go.
      [Before]
      static method signal_io : Sys::Signal::Handler ($signum : int, $fd : int);
      [After]
      static method signal_go : Sys::Signal::Handler ($signum : int);
      
    * Add the SET_SIG_GO_WRITE_FD method to the Sys::Signal class.
  
  [New Features]
    * Add the O_BINARY method to the Sys::IO::Constant class.
    * Add the O_TEXT method to the Sys::IO::Constant class.
    * Add the _pipe method to the Sys::Process class.
    * The pipe method in the Sys class calls the _pipe method in the Sys::Process.
0.499 2023-11-17
  [New Features and Incompatible Changes]
    * Add the eq method to the Sys::Signal::Handler.
0.498 2023-11-16
  [New Features and Incompatible Changes]
    * Add the eq method to the Sys::Signal::Handler.
    * The signal method returns the old signal handler.
    * Remove the SIG_DFL and SIG_DFL class variables from the Sys::Signal class and add the SIG_DFL and SIG_DFL methods.
    * Remove the Sys::Signal::Handler::Ignore class.
    * Remove the Sys::Signal::Handler::Default class.
    * The signal method in the Sys class returns the old signal handler.
    * Add the signal_io method to the Sys::Signal class.
    * Add the SIG_IO method to the Sys::Signal class.
    * Add the close method to the Sys class.
    
      static method close : int ($stream : Sys::IO::FileStream);
    
0.497 2023-11-16
  [New Features and Incompatible Changes]
    * Add $len argument to the send method in the Sys class and changes argument order.
      
      [Before]
      static method sendto : int ($sockfd : int, $buf : string, $len : int, $flags : int, $addr : Sys::Socket::Sockaddr, $addrlen : int, $buf_offset : int = 0);
      
      [After]
      static method send : int ($sockfd : int, $buf : string, $flags : int, $addr : Sys::Socket::Sockaddr = undef, $len : int = -1, $buf_offset : int = 0);
      
0.496 2023-11-16
  [New Features]
    * Add $buf_offset argument to the sendto method in the Sys::Socket class.
      
      static method sendto : int ($sockfd : int, $buf : string, $len : int, $flags : int, $addr : Sys::Socket::Sockaddr, $addrlen : int, $buf_offset : int = 0);

    * Add $buf_offset argument to the send method in the Sys class.
      
      static method sendto : int ($sockfd : int, $buf : string, $len : int, $flags : int, $addr : Sys::Socket::Sockaddr, $addrlen : int, $buf_offset : int = 0);
  
0.495001 2023-11-14
  [Bug Fix]
    * Fix a bug that the Sys::Socket::Errno class file is not added.
0.495 2023-11-14
  [Bug Fix]
    * Fix the bug that the error handling of the connect method in the Sys::Socket does not work well.
  [Incompatible Changes]
    * Remove the connect_raw method in the Sys::Socket class.
    * Remove the getaddrinfo_raw method in the Sys::Socket class.
    * Remove the getnameinfo_raw method in the Sys::Socket class.
    * Remove the access_raw method in the Sys::IO class.
    * Remove the eaccess_raw method in the Sys::IO class.
    * Remove the faccessat_raw method in the Sys::IO class.
    * Remove the fstat_raw method in the Sys::IO::Stat class.
    * Remove the lstat_raw method in the Sys::IO::Stat class.
    * Remove the stat_raw method in the Sys::IO::Stat class.
  [Document Fix]
    * Add the doc of the faccessat method in the Sys::IO class.
  [Exception Message Changes]
    * Add periods to exception messages.
  [New Features]
    * Add the Sys::Socket::Errno doc.
    * Add the say method to the Sys class.
  [Bug Fix]
    * Fix the bug that the new method in the Sys::Poll::PollfdArray cannot receive 0.
0.494 2023-11-12
  [Prerequirement Changes]
    * Require SPVM 0.989060.
  [Test Improvement]
    * Tests of sockets becomes more relaiable.
0.493 2023-10-02
  [Requirement Changes]
    * Require SPVM 0.989047.
  [Internal Changes]
    * Use new native APIs.
  [Exception Message Changes]
    * Improve English of exception messages.
  [Document Changes]
    * Improve the formats of documents.
  [New Features]
    * Add the spvm_stdin method to the Sys::IO class.
    * Add the spvm_stdout method to the Sys::IO class.
    * Add the spvm_stderr method to the Sys::IO class.
  [Incompatible Changes]
    * The STDIN method in the Sys class retruns the return value of the spvm_stdin method in the Sys::IO class.
    * The STDOUT method in the Sys class retruns the return value of the spvm_stdout method in the Sys::IO class.
    * The STDERR method in the Sys class retruns the return value of the spvm_stderr method in the Sys::IO class.
    * The no_need_free field in the Sys::IO::FileStream class is renamed to no_close.
    * The fdopen method in the Sys::IO throws an exception.
    
      $fd must be greater than or equal to 0. Otherwise an exception is thrown.
  [Bug Fix]
    * Fix the test bug that tests of Sys::IO on Windows does not work well.
0.492 2023-09-18
  [Incompatibe Changes]
    * Remove the readline method in the Sys::IO class. Use the readline method in the Sys class.
0.491 2023-09-13
  [New Features]
    * The following methods in the Sys class are added.
    
      static method say : int ($stream : Sys::IO::FileStream, $string : string);

      static method STDIN : Sys::IO::FileStream ();

      static method STDOUT : Sys::IO::FileStream ();

      static method STDERR : Sys::IO::FileStream ();
      
      static method signal : void ($signum : int, $handler_name : string);
      
      static method kill : int ($sig : int, $pid : int);
      
  [Incompatible Changes]
  
    * The Sys::Signal::Handler::Monitor class is removed.
    * The Sys::Signal::Handler::Unknown class is removed.
    
    * The following methods in the Sys::Signal class are removed.
      
      -  static method reset_monitored_signal : void ($signum : int);
      -  static method check_monitored_signal : int ($signum : int);
    
    * The following methods in the Sys::Signal class are changed.
      
      - native static method signal : Sys::Signal::Handler ($signum : int, $handler : Sys::Signal::Handler);
      + native static method signal : void ($signum : int, $handler : Sys::Signal::Handler);
      
      $handler must be a Sys::Signal::Handler::Default object or a Sys::Signal::Handler::Ignore object. Otherwise an exception is thrown.
      
      User signal handlers are wrong implementation for SPVM differnt from the C language.
    
0.490 2023-09-11
  [Bug Fix]
    * Fix a bug that the fcntl method in the Sys::IO class does not work well.
0.489 2023-09-11
  [New Features]
    * The following methods in the Sys class are added.
    
      + static method fcntl : int ($fd : int, $command : int, $command_arg : object of Int|Sys::IO::Flock|object = undef);
  [Bug Fix]
    * Fix a bug that the fcntl method in the Sys::IO class does not work well.
0.488 2023-09-11
  [Prerequirement Changes]
    * Require SPVM 0.989041.
    
0.487 2023-09-08
  [New Features]
    * The following methods in the Sys class are added.
    
      + static method truncate : int ($fd : int, $legnth : long);
      + static method sysread : int ($fd : int, $buf : mutable string, $count : int, $buf_offset : int = 0);
      + static method syswrite : int ($fd : int, $buf : string, $count : int = -1, $buf_offset : int = 0);
      + static method read : int ($stream : Sys::IO::FileStream, $buf : mutable string, $count : int, $buf_offset : int = 0);
      + static method fileno : int ($stream : Sys::IO::Stream);
      + static method eof : int ($stream : Sys::IO::Stream);
      + static method readline : mutable string ($stream : Sys::IO::FileStream);
      + static method getc : int ($stream : Sys::IO::FileStream);
      + static method flock : int ($fd : int, $operation : int);
      + static method print : int ($stream : Sys::IO::FileStream, $string : string);
      + static method printf : int ($stream, $format : string, $args : object[]);
      + static method read : int ($stream : Sys::IO::FileStream, $buf : mutable string, $count : int, $buf_offset : int = 0);
      + static method rewinddir : void ($dirp : Sys::IO::DirStream);
      + static method readdir : Sys::IO::Dirent ($dirp : Sys::IO::DirStream);
      + static method seek : int ($stream : Sys::IO::FileStream, $offset : long, $whence : int);
      + static method sysseek : long ($fd : int, $offset : long, $whence : int);
      + static method tell : long ($stream : Sys::IO::FileStream);
      + static method telldir : long ($dirp : Sys::IO::DirStream);
      + static method lstat : Sys::IO::Stat ($path : string);
      + static method utime : int ($atime : long, $mtime : long, $filename : string);
      + static method chown : int ($owner : int, $group : int, $path : string);
  [Deprecation]
    * The following methods in the Sys::IO class are deprecated. Use the readline method in the Sys class.
      
      static method readline : string ($stream : Sys::IO::FileStream);
      
0.486 2023-09-06
  [Bug Fix]
    * Some bugs are fixed: The connect, getaddrinfo, and getnameinfo have not return correct return values.
  [New Features]
    * The Sys::Socket::Util class is added.
    * The Sys::Socket::In_addr_base class is added.
    * The Sys::Socket::In_addr class extends Sys::Socket::In_addr_base.
    * The Sys::Socket::In6_addr class extends Sys::Socket::In_addr_base.
  [Incompatible Changes]
    * The following methods in the Sys::Socket class are changed.
      
      -  static method inet_pton : int ($af : int, $src : string, $dst : object of Sys::Socket::In_addr|Sys::Socket::In6_addr);
      +  static method inet_pton : int ($af : int, $src : string, $dst : Sys::Socket::In_addr_base);
      
      -  static method inet_ntop : mutable string ($af : int, $src : object of Sys::Socket::In_addr|Sys::Socket::In6_addr, $dst : mutable string, $size : int);
      +  static method inet_ntop : mutable string ($af : int, $src : Sys::Socket::In_addr_base, $dst : mutable string, $size : int);
    
0.485 2023-09-04
  
  [Bug Fix]
    * A bug fix: the sleep method in the Sys class has been wrong.
    
  [Incompatible Changes]
    * The following methods in the Sys class is changed.
    
      -  static method send : int ($sockfd : int, $buf : string, $len : int, $flags : int, $buf_offset : int = 0);
      +  static method send : int ($sockfd : int, $buf : string, $flags : int, $addr : Sys::Socket::Sockaddr = undef);
      
      -  static method select : int ($nfds : int, $readfds : Sys::Select::Fd_set, $writefds : Sys::Select::Fd_set, $exceptfds : Sys::Select::Fd_set, $timeout : Sys::Time::Timeval);          +  static method select : int ($readfds : Sys::Select::Fd_set, $writefds : Sys::Select::Fd_set, $exceptfds : Sys::Select::Fd_set, $timeout : Sys::Time::Timeval);
  
  [Exception Message Changes]
    * Error messages in the Sys::Time::Itimerval class are improved.
  [New Features]
    * The following methods are added to Sys::Socket.
    
      static method closesocket : int ($fd : int);
    
0.484 2023-09-04
  [New Features]
    
    * The following methods are added to the Sys::Socket class.
    
      static method to_family_sockaddr : Sys::Socket::Sockaddr ($addr : Sys::Socket::Sockaddr);
    
    * The following methods are added to the Sys::Socket::Sockaddr class.
    
      +  static method new : Sys::Socket::Sockaddr::In ();
      +  method DESTROY : void ();
      +  method set_sa_family : void ($family : int);
      
    * The following methods in the Sys::Socket::Sockaddr class is implemented.
    
      +  method sa_family : int ();
    
    * The following methods are added to the Sys class.
      + static method closedir : int ($dirp : Sys::IO::DirStream);
      +  static method opendir : int ($dh_ref : Sys::IO::DirStream[], $dir : string);
      +  static method bind : int ($sockfd : int, $addr : Sys::Socket::Sockaddr);
      +  static method listen : int ($sockfd : int, $backlog : int);
      +  static method accept : Sys::Socket::Sockaddr ($new_sockfd_ref : int*, $sockfd : int);
      +  static method connect : int ($sockfd : int, $addr : Sys::Socket::Sockaddr)
      +  static method getpeername : Sys::Socket::Sockaddr ($sockfd : int)
      +  static method getsockname : Sys::Socket::Sockaddr ($sockfd : int)
      +  static method recv : int ($sockfd : int, $buf : mutable string, $len : int, $flags : int, $buf_offset : int = 0);
      +  static method send : int ($sockfd : int, $buf : string, $len : int, $flags : int, $buf_offset : int = 0);
      +  static method shutdown : int ($sockfd : int, $how : int);
      +  static method socket : void ($sockfd_ref : int*, $domain : int, $type : int, $protocol : int);
      +  static method socketpair : int ($sock_fd1_ref : int*, $sock_fd2_ref : int*, $domain : int, $type : int, $protocol : int);
      +  static method shutdown : int ($sockfd : int, $how : int);
      +  static method socket : int ($domain : int, $type : int, $protocol : int);
      +  static method socketpair : int ($domain : int, $type : int, $protocol : int, $pair : int[]);
      +  static method setsockopt : int ($sockfd : int, $level : int, $optname : int, $optval : object of string|Int);

  [Incompatible Changes]
    * The setsockopt_int and setsockopt_int is removed from the Sys::Socket class.
    * The sizeof method in the Sys::Socket::Sockaddr class and its child classes are renamed to the size method.
    * The Sys::Socket::Sockaddr::Interface interface is removed.
    * The Sys::Socket::Sockaddr class does not have the Sys::Socket::Sockaddr::Interface interface.
    * The has_interface method is removed from the Sys::Socket::Sockaddr class.
    * The following names of methods in clesses are renamed.
    
      class Sys::Socket::Addrinfo
      -  native method copy_ai_addr : Sys::Socket::Sockaddr ();
      +  native method ai_addr : Sys::Socket::Sockaddr ();
      -  native method copy_ai_canonname : string ();
      +  native method ai_canonname : string ();
      class Sys::Socket::Sockaddr::In extends Sys::Socket::Sockaddr : pointer
      -  native method copy_sin_addr : Sys::Socket::In_addr ();
      +  native method sin_addr : Sys::Socket::In_addr ();
      class Sys::Socket::Sockaddr::In extends Sys::Socket::Sockaddr : pointer
      -    $clone->set_sin_addr($self->copy_sin_addr);
      +    $clone->set_sin_addr($self->sin_addr);
      class Sys::Socket::Sockaddr::In6 extends Sys::Socket::Sockaddr : pointer
      -  native method copy_sin6_addr : Sys::Socket::In6_addr ();
      +  native method sin6_addr : Sys::Socket::In6_addr ();
      class Sys::Socket::Sockaddr::In6 extends Sys::Socket::Sockaddr : pointer
      -    $clone->set_sin6_addr($self->copy_sin6_addr);
      +    $clone->set_sin6_addr($self->sin6_addr);
      class Sys::Socket::Sockaddr::Un extends Sys::Socket::Sockaddr : pointer
      -  native method copy_sun_path : string ();
      +  native method sun_path : string ();
      -    $clone->set_sun_path($self->copy_sun_path);
      +    $clone->set_sun_path($self->sun_path);
      class Sys::Time::Itimerval : pointer
      -  native method copy_it_interval : Sys::Time::Timeval ();
      -  native method copy_it_value : Sys::Time::Timeval ();
      +  native method it_interval : Sys::Time::Timeval ();
      +  native method it_value : Sys::Time::Timeval ();

0.483 2023-08-22
  [New Features]
    * The ioctlsocket method is added to the Sys::Ioctl class.
  [Incompatible Changes]
    * The ioctl method in the Sys::Ioctl throws an exception in Windows.
  [Reversion]
    The following changes are reverted.
    
    0.482 2023-08-22
    [Changes]
      * The ioctl method is added to the Sys::IO class.
      * The FIONBIO method is added to the Sys::IO::Contant class.
      * The ioctlsocket method is added to the Sys::Socket class.
    [Deprecation]
      * The Sys::Ioctl class is deprecated.
      * The Sys::Ioctl::Constant class is deprecated.

0.482 2023-08-22
  [New Features]
    * The ioctl method is added to the Sys class.
  [Changes]
    * The ioctl method is added to the Sys::IO class.
    * The FIONBIO method is added to the Sys::IO::Contant class.
    * The ioctlsocket method is added to the Sys::Socket class.
  [Deprecation]
    * The Sys::Ioctl class is deprecated.
    * The Sys::Ioctl::Constant class is deprecated.
  [Test Fix]
    * Tests on Windows are fixed.
0.481008 2023-07-12
  [Internal Changes]
    * Only internal changes were done.
    
0.481007 2023-06-30
  [Prerequirement Changes]
    * SPVM 0.989017+ is required.
0.481006 2023-06-26
  [Prerequirement Changes]
    * SPVM 0.989012+ is required.
0.481005 2023-06-08
  [Prerequirement Changes]
    * SPVM 0.989002+ is required.
0.481004 2023-05-29
  [Prerequirement Changes]
    * SPVM 0.986+ is required.
0.481003 2023-05-23
  [Prerequirement Changes]
    * SPVM 0.981+ is required.
0.481002 2023-05-23
  [Changes]
    * Internal changes only.
0.481001 2023-05-10
  [Prerequirement Changes]
    * SPVM 0.976+ is required.
    * SPVM::Resource::SocketUtil 1.001+ is required.
0.481 2023-05-09
  [Incompatible Changes]
    * The definition of the defined method in the Sys::OS class is changed.
      [Before]
      static method defined : int ($macro_name : string, $value = undef : object of Int|Long|Double);
      [After]
      static method defined : int ($macro_name : string, $value_ref = undef : object of int[]|long[]|double[])
    * The definition of the ioctl method in the Sys::Ioctl class is changed.
      [Before]
      static method ioctl : int ($fd : int, $request : int, $request_arg = undef : object of Byte|Short|Int|Long|Float|Double|object);
      [After]
      static method ioctl : int ($fd : int, $request : int, $request_arg_ref = undef : object of byte[]|short[]|int[]|long[]|float[]|double[]|object);
    * The definition of the fcntl method in the Sys::IO class is changed.
      [Before]
      static method fcntl : int ($fd : int, $command : int, $command_arg = undef : object of Byte|Short|Int|Long|Float|Double|Sys::IO::Flock|object);
      [After]
      static method fcntl : int ($fd : int, $command : int, $command_arg = undef : object of Int|Sys::IO::Flock|object);    
  [New Features]
    * The version string can be got.
  [Changes]
    * The implementation logic of the ioctl method in the Sys::Ioclt class got to be the one on Linux.
0.48 2023-04-07
  [New Features and Incompatible Changes]
    * Added the Sys::Time::Tm class.
    * Added the following methods in Sys::Time class.
    
      static method time : long ();
      static method localtime : Sys::Time::Tm ($time : long);
      static method gmtime : Sys::Time::Tm ($time : long);
    * Use the Sys::Time::Tm class instead of the Time class in all place.
0.47 2023-04-06
  [License Change]
    * The license is changed to MIT License.
  [Prerequirement Change]
    * SPVM 0.9701 is required.
0.46 2023-03-31
  [Internal Compatible Changes]
    * Use new_pointer_ojbect_by_name instead of the deprecated new_pointer_by_name Native API.
0.45  2022-06-21
  [Internal Compatible Changes]
    * Use SPVM::ExchangeAPI method instead of SPVM functions.
0.44 2022-03-16
  [Test Fix]
    * Fixed symlink tests when some time st_atime, st_mtime, st_ctime is different in target and symbolic link.
  [Incompatible Changes]
    * Removed the following temporary resotred methods in the Sys class.
      static method getenv : string ($name : string);
      static method defined : int ($macro_name : string, $value = undef : object of Int|Long|Double);
      
0.43 2022-03-15
  [Deprecation]
    * SPVM::FileTest is deprecated. Use methods in the Sys class instead.
  [Exception Message Improvement]
    * Improve the following exception messages.
      [Before]
        [System Error]unlink failed:%s. The \"%s\" directory can't be removed"      
      [After]
        [System Error]unlink failed:%s. The \"%s\" file can't be removed"      
  [Test Improvement]
    * Improved tests of Sys::IO::Stat.
  [Incompatible Changes]
    * Removed the readlink method in the Sys class and the readlinkp method in the Sys::IO class because I don't know the Windows/Unix portable way to allocate memory yet.
    * Removed the unlinkp method in the SPVM::Sys::IO class. This logic is moved to the unlink method in the Sys class and fixed the return value.
    * Removed the renamep method in the SPVM::Sys::IO class. This logic is moved to the rename method in the Sys class.
    * Removed the symlinkp method in the SPVM::Sys::IO class. This logic is moved to the symlink method in the Sys class.
    * Removed the readlinkp method in the SPVM::Sys::IO class. This logic is moved to the readlink method in the Sys class.
    * Removed the chmodp method in the SPVM::Sys::IO class. This logic is moved to the chmod method in the Sys class.
    * Removed the chownp method in the SPVM::Sys::IO class. This logic is moved to the chown method in the Sys class.
    * Removed the utimep method in the SPVM::Sys::IO class. This logic is moved to the utime method in the Sys class.
    * Removed the timesp method in the SPVM::Sys::Time class. This logic is moved to the times method in the Sys class.
    * Removed the statp method in the SPVM::Sys::IO::Stat class. This logic is moved to the stat method in the Sys class.
    * Removed the lstatp method in the SPVM::Sys::IO::Stat class. This logic is moved to the lstat method in the Sys class.
    * Remvoed the argument of the new method in the Sys::IO::Stat class.
    * Removed the is_windows method in the Sys class. This is used from the Sys::OS class.
    * Removed the get_osname method in the Sys::OS class.
    * Renamed the get_osname method in the Sys class to osname.
  [New Features]
    * Added the Sys::IO::Windows class.
    * Added the symlinkp method in the Sys::IO: class.
      static method unlinkp : int ($oldpath : string, $newpath : string);
      static method renamep : int ($oldpath : string, $newpath : string);
      static method symlinkp : int ($oldpath : string, $newpath : string);
    * The l method in the Sys::FileTest supports Windows.
    * Added the following methods in the Sys class.
      
      static method A : double ($file : string);

      static method C : double ($file : string);

      static method M : double ($file : string);

      static method O : int ($file : string);

      static method R : int ($file : string);

      static method S : int ($file : string);

      static method W : int ($file : string);

      static method X : int ($file : string);

      static method b : int ($file : string);

      static method c : int ($file : string);

      static method d : int ($file : string);

      static method e : int ($file : string);

      static method f : int ($file : string);

      static method g : int ($file : string);

      static method k : int ($file : string);

      static method l : int ($file : string);

      static method o : int ($file : string);

      static method p : int ($file : string);

      static method r : int ($file : string);

      static method s : long ($file : string);

      static method u : int ($file : string);

      static method w : int ($file : string);

      static method x : int ($file : string);

      static method z : int ($file : string);
      
      static method env : string ($name : string);

      static method time : long ();

      static method localtime : Time::Info ($time : long);

      static method gmtime : Time::Info ($time : long);

      static method process_id : int ();

      static method stat : Sys::IO::Stat ($path : string);

      static method chdir : int ($path : string);

      static method chmod : int ($mode :int, $path : string);

      static method mkdir : int ($path : string, $mode : int);

      static method umask : int ($mode : int);

      static method rmdir : int ($path : string);

      static method unlink : int ($pathname : string);

      static method rename : int ($oldpath : string, $newpath : string);

      static method symlink : int ($oldpath : string, $newpath : string);

      static method readlink : int ($file : string);

      static method sleep : int ($seconds : int);
      
    * Added the Sys::OS class.
    * Added the Sys::Env class.
0.42 2022-02-21
  [Prerequirement Changes]
    * SPVM 0.9692+ is needed.
  [Incompatible Changes]
    * The $base_time argument is removed in the A, C, M method in the Sys::IO::Stat and Sys::FileTest.
0.41 2022-02-17
  [Incompatible Changes]
    * The x and X method in the Sys::FileTest class doesn't check the file extension on Windows.
  [Bug Fix]
    * Fixed link errors of Sys::Socket::Ip_mreq and Sys::Socket::Ipv6_mreq.
0.40 2022-02-17
  [Incompatible Changes]
    * Renamed the eaccess_emulate in the Sys::IO class to eaccess.
    * Renamed the eaccess_emulate_raw in the Sys::IO class to eaccess_raw.
    * The z method in the Sys::FileTest method throw an exception when the file doesn't exist.
  [New Features]
    * Added the following methods to the Sys::IO::Stat class.
      method A : double ($base_time : long);
      method C : double ($base_time : long);
      method M : double ($base_time : long);
      method O : int ();
      method S : int ();
      method b : int ();
      method c : int ();
      method d : int ();
      method d : int ();
      method e : int ();
      method f : int ();
      method g : int ();
      method k : int ();
      method l : int ();
      method o : int ();
      method p : int ();
      method s : long ();
      method u : int ();
      method z : int ();
      method cando : int ($mode : int, $effective : int);
      method r : int ();
      method w : int ();
      method x : int ();
      method R : int ();
      method W : int ();
      method X : int ();

   * Added the $path option arguments is added to the new method in the Sys::Stat.
     
     [Before}
     static method new : Sys::IO::Stat ();
     
     [After}
     static method new : Sys::IO::Stat ($path = undef : string);

0.39 2022-02-14
  [Compatible Intenal Changes]
    * Removed unused the Sys::Util class.
  [New Features]
    * Added the readlinkp method in the Sys::IO class.
    
      static method readlinkp : int ($test_dir : string);
    * Added the following methods to the Sys::IO::Dirent class.
      method d_ino : int ();
      method d_reclen : int ();
      method d_name : string ();
  [Exception Message Improvement]
    * The following exception messages of the methods in the Sys::IO::Stat output the file name.
      [Before]
      -    "[System Error]lstat failed:%s"
      -    "[System Error]stat failed:%s
      [After]
      +    "[System Error]stat failed:%s. The specified file is \"%s\""
      +    "[System Error]lstat failed:%s. The specified file is \"%s\""
    * The following exception messages of the methods in the Sys::IO output the file name.
      [Before]
      - "[System Error]open failed:%s"
      - "[System Error]fopen failed:%s"
      - "[System Error]mkdir failed:%s"
      - "[System Error]rmdir failed:%s"
      - "[System Error]unlink failed:%s"
      - "[System Error]rename failed:%s"
      - "[System Error]realpath failed:%s"
      - "[System Error]_fullpath failed:%s"
      - "[System Error]chdir failed:%s"
      - "[System Error]chmod failed:%s"
      - "[System Error]chown failed:%s"
      - "[System Error]truncate failed:%s"
      - "[System Error]symlink failed:%s"
      - "[System Error]readlink failed:%s"
      - "[System Error]opendir failed:%s"
      - "[System Error]utime failed:%s"
      
      [After]
      + "[System Error]open failed:%s. The \"%s\" file can't be opend"
      + "[System Error]fopen failed:%s. The \"%s\" file can't be opend"
      + "[System Error]mkdir failed:%s. The \"%s\" directory can't be created"
      + "[System Error]rmdir failed:%s. The \"%s\" directory can't be removed"
      + "[System Error]unlink failed:%s. The \"%s\" directory can't be removed"name
      + "[System Error]rename failed:%s. The \"%s\" file can't be renamed to the \"%s\" file"
      + "[System Error]realpath failed:%s. The \"%s\" file can't be resolved"
      + "[System Error]_fullpath failed:%s. The \"%s\" file can't be resolved"
      + "[System Error]chdir failed:%s. The current directory can't be changed to the \"%s\" directory"
      + "[System Error]chmod failed:%s. The permission of the \"%s\" file can't be changed"
      + "[System Error]chown failed:%s. The owner/group of the \"%s\" file can't be changed"
      + "[System Error]truncate failed:%s. The \"%s\" file can't be truncated"
      + "[System Error]symlink failed:%s. The symbolic link from \"%s\" to \"%s\" can't be created"
      + "[System Error]readlink failed:%s. The reading of the symbolic link of the \"%s\" file failed"
      + "[System Error]opendir failed:%s. The \"%s\" directory can't be opened", dir
      + "[System Error]utime failed:%s. The access and modification times of the \"%s\" file can't be changed"
    * Unified an exception message
      [Before]
      in this system
      [After]
      on this system
    [Test Improment]
      * Added the tests of the utime in the Sys::IO class.
    [Internal Compatible Changes]
      * Use pointer instead of deprecated pointer_t.
0.38 2022-02-09
  [Bug Fix]
    * Fixed the bug that the fwrite and fread method in the Sys::IO class throw an exception in a wrong condition.
    
0.37 2022-02-08
  [Prerequirement Changes]
    * SPVM 0.9691+ is needed.
0.3601 2022-02-06
  [Test Bug Fix]
    * Fixed the following testing bug in the Sys::FileTest class
      
      https://github.com/yuki-kimoto/SPVM-Sys/issues/23
      
0.36 2022-02-03
  [Bug Fix]
    * Fixed the bug that many methods in the Sys::FileTest class doesn't work well.
      -r
      -w
      -x
      -o
      -R
      -W
      -X
      -O
    * Fixed the bug that Sys::FileTest doesn't work well on Windows.
      -r is the same as the -R
      -w is the same as the -W
      -x is the same as the -X
      -o is the same as the -O
  [Incompatible Changes]
    The d method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The f method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The g method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The k method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The l method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The b method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The o method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The p method in the FileTest doesn't throw an exception when the directori doesn't exist.
    The O method in the FileTest doesn't throw an exception when the directori doesn't exist.
    
0.35 2022-01-30
  [Test Bug Fix]
    * Fixed the testing bug that the tests on latest SPVM don't work well.
0.34 2022-01-06
  [Prerequirement Changes]
    * SPVM 0.9679+ is needed.
  [New Features]
    * Added the closed field in the Sys::IO::DirStream class.
    * Added the closed field in the Sys::IO::FileStream class.
    * Added the no_need_free field in the Sys::IO::FileStream class.
    * Added the lengthe field in the Sys::Poll::PollfdArray class.
0.33 2022-12-26
  [Prerequirement Bug Fix]
    * Fixed prerequirement in Makefile.PL because SPVM::Resource::SocketUtil is needed when "perl Makefile.PL" is executed.
  [Prerequirement Changes]
    * SPVM 0.9670+ is needed.
  [Test Improvement]
    * Improve Github Action workflow for tests. It supports latest Windows and the download of cpanm.
0.32 2022-12-20
  [Prerequirement Changes]
    * SPVM::Sys needs SPVM 0.9668+.
0.31 2022-12-15
  [Build Process Improvement]
    * Added --meta option to Makefile.PL
  [Build Process Bug Fix]
    * Fixed the SPVM module dependency in Makefile.PL
      [Before]
      PREREQ_PM => {
        'SPVM'              => '0.9665',
      },
      [After]
      CONFIGURE_REQUIRES => {
        'SPVM'              => '0.9665',
      },
  [Test Improvement]
    * Improve the workflow of Github Actions.
    
0.30 2022-12-13
  [Build Process Improvement]
    * Added --no-build-spvm-modules option to Makefile.PL.
    * Removed cpanm and added the command to download cpanm to the GitHub action script.
    * Github action scripts becomes more portable.
  [Incompatible Changes]
    * Changed the following method definitions in the Sys::Socket::Sockaddr class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
    * Changed the following method definitions in the Sys::Socket::Sockaddr::In class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
      -  method sin_family : byte ();
      +  method sin_family : int ();
      -  method set_sin_family : void ($family : byte);
      +  method set_sin_family : void ($family : int);
      -  method sin_port : short ();
      +  method sin_port : int ();
      -  method set_sin_port : void ($port : short);
      +  method set_sin_port : void ($port : int);
    * Changed the following method definitions in the Sys::Socket::Sockaddr::In6 class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
      -  method sin6_family : byte ();
      +  method sin6_family : int ();
      -  method set_sin6_family : void ($family : byte);
      +  method set_sin6_family : void ($family : int);
      -  method sin6_port : short ();
      +  method sin6_port : int ();

      -  method set_sin6_port : void ($port : short);
      +  method set_sin6_port : void ($port : int);

    * Changed the following method definitions in the Sys::Socket::Sockaddr::Storage class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
      -  method ss_family : byte ();
      +  method ss_family : int ();
      -  method set_ss_family : void ($family : byte)
      +  method set_ss_family : void ($family : int)
    * Changed the following method definitions in the Sys::Socket::Sockaddr::Un class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
      -  method sun_family : byte ();
      +  method sun_family : int ();
      -  method set_sun_family : void ($family : byte)
      +  method set_sun_family : void ($family : int)
    * Changed the following method definitions in the Sys::Socket::Sockaddr::Interface class.
      -  method sa_family : byte ()
      +  method sa_family : int ()
    * Changed the following method definitions in the Sys::Poll::PollfdArray class.
      -  method events : short ($index : int);
      +  method events : int ($index : int);
      -  method set_events : void ($index : int, $events : short);
      +  method set_events : void ($index : int, $events : int);
      -  method revents : short ($index : short);
      +  method revents : int ($index : int);
      -  method set_revents : void ($index : int, $revents : short);
      +  method set_revents : void ($index : int, $revents : int);

0.29 2022-12-13
  [Internal Compatible Changes]
    * Use SPVM::Resource::SocketUtil.
  [Prerequirement Changes]
    * SPVM::Sys needs SPVM 0.9665+.
    * SPVM::Sys needs SPVM::Resource::SocketUtil 0.02+.
0.28 2022-11-22
  [New Features]
    * Added the following methods to the Sys::Socket::Constant class.
    
      static method IPPROTO_ICMP : int ();
      static method ICMP_ADDRESS : int ();

      static method ICMP_DEST_UNREACH : int ();

      static method ICMP_ECHO : int ();

      static method ICMP_ECHOREPLY : int ();

      static method ICMP_ECHOREQUEST : int ();

      static method ICMP_FILTER : int ();

      static method ICMP_FRAG_NEEDED : int ();

      static method ICMP_PARAMETERPROB : int ();

      static method ICMP_REDIRECT : int ();

      static method ICMP_SOURCE_QUENCH : int ();

      static method ICMP_TIMESTAMP : int ();

      static method ICMP_TIME_EXCEEDED : int ();

   * Added the following optional argument to the recv method in the Sys::Socket class.
     [Before]
       static method recv : int ($sockfd : int, $buf : mutable string, $len : int, $flags : int);
     [After]
       static method recv : int ($sockfd : int, $buf : mutable string, $len : int, $flags : int, $buf_offset = 0 : int);

   * Added the following optional argument to the send method in the Sys::Socket class.
     [Before]
       static method send : int ($sockfd : int, $buf : string, $len : int, $flags : int);
     [After]
       static method send : int ($sockfd : int, $buf : string, $len : int, $flags : int, $buf_offset = 0 : int);
    
    * Added the following methods to the Sys::Socket class
      static method sockatmark : int ($sockfd : int);

      static method sendto : int ($sockfd : int, $buf : string, $len : int, $flags : int, $addr : Sys::Socket::Sockaddr, $addrlen : int);
      
      static method connect_raw : int ($sockfd : int, $addr : Sys::Socket::Sockaddr, $addrlen : int);
  
  [Bug Fix]
    * Added the following methods that is documented but not implemented to the Sys::Socket::Constant class.

      static method SO_BROADCAST : int ();

0.27 2022-11-14
  [Prerequirement Changes]
    * SPVM::Sys needs SPVM 0.9661+.
  [Bug Fix]
    * Suppress unneeded warnings in the clone method in the Sys::Socket::Sockaddr.
0.26 2022-11-12
  [Incompatible Changes]
    * The definitions of the following methods in the Sys::IO::Stat class are changed.
      [Before]
        method st_dev : int ();
        method st_ino : int ();
        method st_nlink : int ();
        method st_rdev : int ();
      [After]
        method st_dev : long ();
        method st_ino : long ();
        method st_nlink : long ();
        method st_rdev : long ();
   * The stat and lstat methods in the Sys::IO class are moved to the Sys::IO::Stat class.
   
  [New Features]
    * Added the following methods to the Sys::IO::Stat class.
      static method fstat_raw : int ($fd : int, $stat : Sys::IO::Stat);
      
      static method fstat : int ($fd : int, $stat : Sys::IO::Stat);

    * Added the following methods to the Sys::IO class.
    
      static method readline : mutable string ($stream : Sys::IO::FileStream);
      
      static method ftruncate : int ($fd : int, $length : long);
      
      static method ungetc : int ($c : int, $stream : Sys::IO::FileStream);
      
      static method fsync : int ($fd : int);
      
      static method freopen : Sys::IO::FileStream ($path : string, $mode : string, $stream : Sys::IO::FileStream);
      
      static method setvbuf : int ($stream : Sys::IO::FileStream, $buf : mutable string, $mode : int, $size : int);

      static method setbuf : void ($stream : Sys::IO::FileStream, $buf : mutable string);

      static method setbuffer : void ($stream : Sys::IO::FileStream, $buf : mutable string, $size : int);

      static method setlinebuf : void ($stream : Sys::IO::FileStream);

      static method stdin : Sys::IO::FileStream ()

      static method stdout : Sys::IO::FileStream ()

      static method stderr : Sys::IO::FileStream ()

    * Added the following methods to the Sys::IO::Constant class.
      
      static method STDIN_FILENO : int ();
      
      static method STDOUT_FILENO : int ();
      
      static method STDERR_FILENO : int ();
      
      static method BUFSIZ : int ();
      
      static method _IONBF : int ();
      
      static method _IOLBF : int ();
      
      static method _IOFBF : int ();

    * Added the offset argument to the following methods.
      [Before]
      static method read : int ($fd : int, $buf : mutable string, $count : int);
      static method write : int ($fd : int, $buf : string, $count : int);
      static method fread : int ($ptr : mutable string, $size : int, $nmemb : int, $stream : Sys::IO::FileStream);
      static method fgets : mutable string ($s : mutable string, $size : int, $stream : Sys::IO::FileStream);
      static method fwrite : int ($ptr : string, $size : int, $nmemb : int, $stream : Sys::IO::FileStream);
      
      [After]
      static method read : int ($fd : int, $buf : mutable string, $count : int, $buf_offset = 0 : int);
      static method write : int ($fd : int, $buf : string, $count : int, $buf_offset = 0 : int);
      static method fread : int ($ptr : mutable string, $size : int, $nmemb : int, $stream : Sys::IO::FileStream, $ptr_offset = 0 : int);
      static method fgets : mutable string ($s : mutable string, $size : int, $stream : Sys::IO::FileStream, $s_offset = 0 : int);
      static method fwrite : int ($ptr : string, $size : int, $nmemb : int, $stream : Sys::IO::FileStream, $ptr_offset = 0 : int);
      
  [Exception Message Improvement]
    * Improved exception messages in the Sys::IO class.
  
  [Bug Fix]
    * Fixed the bug that the stat method in the Sys::IO doesn't work well in 32bit system. This method is moved to the Sys::IO::Stat class in this release.
    * Fixed the bug that the lstat method in the Sys::IO doesn't work well in 32bit system. This method is moved to the Sys::IO::Stat class in this release.
0.25 2022-11-07
  [OS Support Changes]
    * SPVM::Sys doesn't supports OpenBSD because the following tests are hard to fix for us.
      http://www.cpantesters.org/cpan/report/fa34e08c-5cf9-11ed-aba6-9a79f339625c
  [Bug Fix]
    * Fixed the bug that OpenBSD doesn't have clock_nanosleep.
      undefined symbol 'clock_nanosleep'
      http://www.cpantesters.org/cpan/report/fadaebbe-5cc0-11ed-b394-4404171ec35d
0.24 2022-11-04
  [New Features]
    * Added the Sys::Signal class
    * Added the Sys::Signal::Constant class.
    * Added the Sys::Signal::Handler class.
    * Added the following methods in the Sys::Signal::Constant class.
      BUS_ADRALN
      BUS_ADRERR
      BUS_MCEERR_AO
      BUS_MCEERR_AR
      BUS_MCERR_
      BUS_OBJERR
      CLD_CONTINUED
      CLD_DUMPED
      CLD_EXITED
      CLD_KILLED
      CLD_STOPPED
      CLD_TRAPPED
      FPE_FLTDIV
      FPE_FLTINV
      FPE_FLTOVF
      FPE_FLTRES
      FPE_FLTSUB
      FPE_FLTUND
      FPE_INTDIV
      FPE_INTOVF
      FUTEX_WAIT
      ILL_BADSTK
      ILL_COPROC
      ILL_ILLADR
      ILL_ILLOPC
      ILL_ILLOPN
      ILL_ILLTRP
      ILL_PRVOPC
      ILL_PRVREG
      POLL_ERR
      POLL_HUP
      POLL_IN
      POLL_MSG
      POLL_OUT
      POLL_PRI
      SI_ASYNCIO
      SI_KERNEL
      SI_MESGQ
      SI_QUEUE
      SI_SIGIO
      SI_TIMER
      SI_TKILL
      SI_USER
      TRAP_BRANCH
      TRAP_BRKPT
      TRAP_HWBKPT
      TRAP_TRACE
      SIGABRT
      SIGALRM
      SIGBUS
      SIGCHLD
      SIGCONT
      SIGFPE
      SIGHUP
      SIGILL
      SIGINT
      SIGIO
      SIGKILL
      SIGPIPE
      SIGPROF
      SIGPWR
      SIGQUIT
      SIGRTMAX
      SIGRTMIN
      SIGSEGV
      SIGSTKFLT
      SIGSTOP
      SIGSYS
      SIGTERM
      SIGTRAP
      SIGTSTP
      SIGTTIN
      SIGTTOU
      SIGURG
      SIGUSR1
      SIGUSR2
      SIGVTALRM
      SIGWINCH
      SIGXCPU
      SIGXFSZ
      SIG_DFL
      SIG_ERR
      SIG_IGN
    * Added the Sys::Signal::Handler::SIG_DFL class.
    * Added the Sys::Signal::Handler::SIG_IGN class.
    * Added the Sys::Signal::Handler::SIG_ERR class.
    * Added the Sys::Signal::Handler::SIG_MONITOR class.
  [Bug Fix]
    * Fixed the bug that "solaris" is detected as "sunos" in the get_osname method in the Sys class. SunOS is detected as "solaris".
      http://www.cpantesters.org/cpan/report/7b1f20d8-5a00-11ed-aba6-9a79f339625c
  [Incompatible Changes]
    * The kill method in the Sys::Process class is moved to the Sys::Signal.
    * The alarm and ualarm method is added to the Sys::Signal class. This was removed from the Sys::Process class at 0.23(2022-11-01)
      native static method alarm : int ($seconds : int);
      native static method ualarm : int ($usecs : int, $interval : int);
    * Added the raise method to the Sys::Signal class.
0.23 2022-11-01
  [Bug Fix]
    * Fixed the bug that the get_osname method in the Sys class returned "sunos", not "solaris" in Soralis.
  [Incompatible Changes]
    * Removed the alarm and ualarm method of the Sys::Process class,
      because the features of the signal is too difficult to understand for me.
      In future, the features of the signal will be porting to Sys::Signal on CPAN module.
0.22 2022-10-31
  [New Features]
    * The defined method in the Sys supports __sun.
    * The get_osname method in the Sys supports sunos.
  [Test Fix]
    * Separate the tests of alarm and ualarm to other files in order to separate the effects of sleep
      The failed test is the following.

      t/Sys_Process.t     (Wstat: 14 Tests: 27 Failed: 0)
      Non-zero wait status: 14
      http://www.cpantesters.org/cpan/report/5535c44e-5730-11ed-8d66-ab3f8ac1dfec
  [OS Support]
    * Support Solaris and SunOS again.
  [Bug Fix]
    * Fixed the bug that SunOS didn't have tv_nsec in stat strcuture.
    The failed test is the following.
    http://www.cpantesters.org/cpan/report/38989036-56f5-11ed-aba6-9a79f339625c
    * Fixed the bug that OpenBSD couldn't compile Sys::Time. The link to "rt" in the config of Sys::Time is needed for some linux environments.
0.21 2022-10-28
  [Bug Fix]
    * Fixed the following bug "undefined symbol: clock_gettime".
      http://www.cpantesters.org/cpan/report/bd054802-55bd-11ed-9ef0-b2246e8775ea
    * Fixed the following bug "F_OK is not defined on this system".
      http://www.cpantesters.org/cpan/report/ca95477e-55bd-11ed-b10d-6ad02691c3e1
  [OS Support Drop]
    * SPVM::Sys only supports FreeBSD 10+ because the following tests couldn't be fixed.
      http://www.cpantesters.org/cpan/report/b26888fa-55bd-11ed-9ef0-b2246e8775ea
    * SPVM::Sys doens't supports Solaris.
      SPVM::Sys only supports Solaris because the following tests couldn't be fixed by us.
      http://www.cpantesters.org/cpan/report/4632b772-5587-11ed-aba6-9a79f339625c
0.20 2022-10-27
  [Test Fix]
    * Fixed the testing bug that the test of the getpeername method in the Sys::Socket failed in a different port.
    * Fixed the testing bug that the test of the status of the waitpid method was checked wrongly.
0.19 2022-10-26
  [Test Fix]
    * Fixed the bug of the testing function search_available_port.
0.18 2022-10-25
  [Test Improvement]
    * Added the tests of the test server.
0.17 2022-10-24
  [Test Improvement]
    * Simplify t/Ioctl.t
    * Added the tests of the test server.
0.16 2022-10-24
  [Prerequirement Change]
    * Need SPVM 0.9657+.
  [Bug Fix]
    * Fixed the bug that FreeBSD can't find WNOHANG symbol adding sys/types.h header.
    * Fixed the bug that FreeBSD that major version is less than 13 doesn't support clock_nanosleep.
    * Fixed the bug that OpenBSD doesn't support struct ip_mreq_source.
  [Test Improvement]
    * Added the stack trace in the TestUtil::Socket module.
0.15 2022-10-21
  [Bug Fix]
    * Fixed the bug that FreeBSD can't compile SPVM::Sys for the following error.
      error: unknown type name 'u_char'
      http://www.cpantesters.org/cpan/report/535be3d8-5046-11ed-9e69-69166e8775ea
  [Test Fix]
    * Fixed the test bug that the test of the realpath method failed.
      Failed test at t/Sys_IO.t line 95.
      http://www.cpantesters.org/cpan/report/dd28d0f2-5060-11ed-aba6-9a79f339625c
0.14 2022-10-20
  [Test Improvement]
    * Added the TestUtil::Scope::Guard class for socket tests and use it.
    * Add the TestUtil::Socket module for the tests of socket.
  [Test Fix]
    * Fixed the logic of searching an available port in Sys_Socket.t, Sys_Poll.t, Sys_Select.t and Sys_Ioctl.t
0.13 2022-10-19
  [New Features]
    * Added the set method to the Sys::Select::Fd_set class.
  [Bug Fix]
    * Fixed the bugs that the following methods are not implemented.
      static method FD_ZERO : void ($set : Sys::Select::Fd_set);
      
      static method FD_SET : void ($fd : int, $set : Sys::Select::Fd_set);
      
      static method FD_CLR : void ($fd : int, $set : Sys::Select::Fd_set);
      
      static method FD_ISSET : int ($fd : int, $set : Sys::Select::Fd_set);
  [Test Improvement]
    * Improved the tests of the Sys::Select class.
0.12 2022-10-18
  [Bug Fix]
    * Try to fix the bug on FreeBSD error: invalid application of 'sizeof' to an incomplete type 'struct sockaddr_in'
    * Try to fix the bug on FreeBSD error: invalid application of 'sizeof' to an incomplete type 'struct sockaddr_in6'
  [Test Improvement]
    * Added testing outputs of the realpath method in the Sys::IO.
0.11 2022-10-18
  [New Features]
    * Added the following methods to Sys class.
      
      static method defined : int ($macro_name : string, $value = undef : object of Int|Long|Double)
      static method get_osname : string ()
    
    * Added the following method to the Sys::IO class.
    
      static method access_raw : int ($pathname : string, $mode : int)
      static method faccessat_raw : int ($dirfd : int, $pathname : string, $mode : int, $flags : int)
      static method faccessat : int ($dirfd : int, $pathname : string, $mode : int, $flags : int)
      static method eaccess_emulate_raw : int ($pathname : string, $mode : int)
      static method eaccess_emulate : int ($pathname : string, $mode : int)
      static method stat_raw : int ($path : string, $stat : Sys::IO::Stat);
      static method lstat_raw : int ($path : string, $stat : Sys::IO::Stat);
      static method FD_ZERO : void ($set : Sys::IO::Fd_set);
      static method FD_SET : void ($fd : int, $set : Sys::IO::Fd_set);
      static method FD_CLR : void ($fd : int, $set : Sys::IO::Fd_set);
      static method FD_ISSET : int ($fd : int, $set : Sys::IO::Fd_set);
      static method select : int ($nfds : int, $readfds : Sys::IO::Fd_set, $writefds : Sys::IO::Fd_set, $exceptfds : Sys::IO::Fd_set, $timeout : Sys::Time::Timeval);
      
    * Added the following methods to Sys::FileTest class.
    
      static method r : int ($file : string);
      static method w : int ($file : string);
      static method x : int ($file : string);
    
    * Added the following methods to Sys::IO::Constant class.
    
      static method FD_SETSIZE : int ()
    
    * Added the Sys::Select::Fd_set class.
    * Added the Sys::Select class.
    * Added the Sys::Select::Constant class.
    * Added the Sys::Poll class.
    * Added the Sys::Poll::Constant class.
    * Added the Sys::Ioctl class.
    * Added the Sys::Ioctl::Constant class.
    
  [Changes]
    * The close method in the Sys::Socket is re-implemented as a native method.
  [Incompativle Changes]
    * Removed the is_D_WIN32 method in the Sys class. Please use Sys->defined("_WIN32") instead.
    * The access method in the Sys::IO gets to raise an exception. Use the access_raw method instead if the original behavior is needed.
    * Moved the poll method from the Sys::IO class to Sys::Poll.
    * Rename the Sys::IO::PollfdArray class to the Sys::Poll::PollfdArray class.
    * Moved the poll constant functions(POLL*) from the Sys::IO::Constant to the Sys::Poll::Constant class.
    * Removed the closesocket method in the Sys::Socket class.
    * Moved the FIONBIO method from Sys::Socket::Constant to Sys::Ioctl::Constant.
    * Removed the ioctl method and the ioctlsocket method in the Sys::Socket class. Use the ioctl method in the Sys::Ioctl instead.
    * Removed the ioctl method in the Sys::IO class. Use the ioctl method in the Sys::Ioctl instead.
0.10 2022-10-14
  [New Features]
    * Added the Sys::Time::Timeval class.
    * Added the Sys::Time::Timezone class.
    * Added the following methods to the Sys::Process class.
    
      static method usleep : int ($usec : int)
      static method ualarm : long ($usecs : long, $interval : long)
    
    * Added the following methods to the Sys::Time class.
      
      static method gettimeofday ($tv : Sys::Time::Timeval, $tz : Sys::Time::Timezone)
      static method clock : long ()
      static method clock_gettime : int ($clk_id : int, $tp : Sys::Time::Timespec)
      static method clock_getres : int ($clk_id : int, $res : Sys::Time::Timespec)
      static method getitimer : int ($which : int, $curr_value : Sys::Time::Itimerval);
      static method setitimer : int ($which : int, $new_value : Sys::Time::Itimerval, $old_value : Sys::Time::Itimerval);
      static method clock_nanosleep : int ($clockid : int, $flags : int, $request : Sys::Time::Timespec, $remain : Sys::Time::Timespec)
      static method nanosleep : int ($rqtp : Sys::Time::Timespec, $rmtp : Sys::Time::Timespec)
      
    * Added the Sys::Time::Timespec class.
    * Added the Sys::Time::Itimerval class.
    * Added the following methods to the Sys::IO::Stat class

      method st_mtim_tv_nsec : long ()
      method st_atim_tv_nsec : long ()
      method st_ctim_tv_nsec : long ()
      
    * Added the Sys::Time::Constant class.
  [Bug Fix]
    * Fixed the bug that the internally integral type is wrong. 32bit is fixed to64bit.
      SPVM::Sys::IO::Utimbuf->set_actime
      Sys::IO::Utimbuf->set_modtime
      Sys::Process->usleep
      Sys::Process->ualarm
      Sys::Time::Timespec->set_tv_sec
      Sys::Time::Timespec->set_tv_nsec
      Sys::Time::Timeval->set_tv_sec
      Sys::Time::Timeval->set_tv_usec
  [Incompativle Changes]
    * The times method is moved from SYS::Process to Sys::Time.
    * The Sys::Process::Tms is renamed to Sys::Time::Tms.
  [Document Improvement]
    * Added the doc of the Sys::Time::Tms.
0.09 2022-10-07
  [New Features]
   * Add the clone method to the Sys::Socket::Sockaddr class.
   
     method clone : Sys::Socket::Sockaddr ()

   * Add the clone method to the Sys::Socket::Sockaddr::In class.
   
     method clone : Sys::Socket::Sockaddr::In ()

   * Add the clone method to the Sys::Socket::Sockaddr::In6 class.
   
     method clone : Sys::Socket::Sockaddr::In6 ()
    
   * Add the clone method to the Sys::Socket::Sockaddr::Un class.
   
     method clone : Sys::Socket::Sockaddr::Un ()
    
   * Add the clone method to the Sys::Socket::Sockaddr::Storage class.
   
     method clone : Sys::Socket::Sockaddr::Storage ()
   
   * Sys::Socket::Sockaddr has Cloneable interface.

   * Added the accessor methods to the Sys::Socket::Addrinfo class.

     method ai_flags : int ();
     
     method set_ai_flags : void ($ai_flags : int);
     
     method ai_family : int ();
     
     method set_ai_family : void ($ai_family : int);
     
     method ai_socktype : int ();
     
     method set_ai_socktype : void ($ai_socktype : int);
     
     method ai_protocol : int ();
     
     method set_ai_protocol : void ($ai_protocol : int);
     
     method copy_ai_addr : Sys::Socket::Sockaddr ();
     
     method copy_ai_canonname : string ();
   
   * Added the Sys::Socket::AddrinfoLinkedList class.
    * Add the following methods to the Sys::Socket::Constant class.
      
      static method NI_MAXHOST : int ();
      
      static method NI_MAXSERV : int ();
    
  [Bug Fix With Incompatible Changes]
    * Fixed the bug that the set_sin6_flowinfo method in the Sys::Socket::Sockaddr::In6 class didn't have the argument.
      [Before]
        method set_sin6_flowinfo : void ()
      [After]
        method set_sin6_flowinfo : void ($flowinfo : int)
    * Fixed the bug that the set_sin6_scope_id in the Sys::Socket::Sockaddr::In6 class didn't have the argument.
      [Before]
        method set_sin6_scope_id : void ()
      [After]
        method set_sin6_scope_id : void ($scope_id : int)
  [Prerequirement Changes]
    * Need SPVM 0.9654+.
  [Incompativle Changes]
    * The definition of the getaddrinfo_raw and getaddrinfo methods in the Sys::Socket
      [Before]
        static method getaddrinfo_raw : int ($node : string, $service : string,
                $hints : Sys::Socket::Addrinfo,
                $res : Sys::Socket::Addrinfo[]);
        static method getaddrinfo : int ($node : string, $service : string,
                $hints : Sys::Socket::Addrinfo,
                $res : Sys::Socket::Addrinfo[]);
      [After]
        static method getaddrinfo_raw : int ($node : string, $service : string,
                $hints : Sys::Socket::Addrinfo,
                $res : Sys::Socket::AddrinfoLinkedList[]);
        static method getaddrinfo : int ($node : string, $service : string,
                $hints : Sys::Socket::Addrinfo,
                $res : Sys::Socket::AddrinfoLinkedList[]);
    * Removed the POLLNORM method in the Sys::IO::Constant.
    
      static method POLLNORM : int ();
      
  [Bug Fix]
    * Fixed the bug that the poll constant values in the Sys::IO::Constant was not used.
    * Fixed the but that the return value of the WSAPoll method in the Sys::Socket class was wrong.
  [Document Fix]
    * Add the doc of the poll constant methods of Sys::IO::Constant.
      
      =head2 POLLERR

        static method POLLERR : int ();

      Get the constant value of C<POLLERR>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLHUP

        static method POLLHUP : int ();

      Get the constant value of C<POLLHUP>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLIN

        static method POLLIN : int ();

      Get the constant value of C<POLLIN>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLNVAL

        static method POLLNVAL : int ();

      Get the constant value of C<POLLNVAL>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLOUT

        static method POLLOUT : int ();

      Get the constant value of C<POLLOUT>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLPRI

        static method POLLPRI : int ();

      Get the constant value of C<POLLPRI>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLRDBAND

        static method POLLRDBAND : int ();

      Get the constant value of C<POLLRDBAND>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLRDNORM

        static method POLLRDNORM : int ();

      Get the constant value of C<POLLRDNORM>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLWRBAND

        static method POLLWRBAND : int ();

      Get the constant value of C<POLLWRBAND>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

      =head2 POLLWRNORM

        static method POLLWRNORM : int ();

      Get the constant value of C<POLLWRNORM>. If the system doesn't define this constant, an exception will be thrown. The error code is set to the class id of the L<Error::NotSupported|SPVM::Error::NotSupported> class.

    * Fixed the document bug that Sys::IO::PollfdArray was called Sys::Poll::PollfdArray.

0.08 2022-10-04
  [New Features]
   * Add the FIONBIO method to the Sys::Socket::Constant class.
     
     static method FIONBIO : int ();
  
  [Warning Fix]
    * Fixed the some warnings on Mac.
  [Bug Fix]
    * Fixed the bug that the SOMAXCONN method in the Sys::Socket::Constant class couldn't be called.
    * Fixed the bug that the getsockopt_int method in the Sys::Socket class doesn't work well.
  [Changes]
    * Change the return type of the inet_ntop method in the Sys::Socket class.
      [Before]
        static method inet_ntop : string ($af : int, $src : object of Sys::Socket::In_addr|Sys::Socket::In6_addr, $dst : mutable string, $size : int);
      [After]
        static method inet_ntop : mutable string ($af : int, $src : object of Sys::Socket::In_addr|Sys::Socket::In6_addr, $dst : mutable string, $size : int);
  [Testing Bug Fix]
    * Fixed the testing bug of the getpriority method in the Sys::Process class.
  [Incompatible Changes]
    * Removed the ioctl_int method in the Sys::Socket class.
    * Renamed the following method in the Sys::Socket::Sockaddr::In class.
      [Before]
        method sin_addr : Sys::Socket::In_addr ()
      [After]
        method copy_sin_addr : Sys::Socket::In_addr ()
    * Renamed the following method in the Sys::Socket::Sockaddr::In6 class.
      [Before]
        method sin6_addr : Sys::Socket::In6_addr ();
      [After]
        method copy_sin6_addr : Sys::Socket::In6_addr ()
    
0.07 2022-09-29
  [Changes]
    * The inet_aton method in the Sys::Socket class is emulated using inet_pton on Windows.
  [Ineffective Changes]
    * Sys::Socket::Constant->SHUT_RD always return 0.
    * Sys::Socket::Constant->SHUT_WR always return 1.
    * Sys::Socket::Constant->SHUT_RDWR always return 2.
    
  [New Features]
    * Added the sizeof method in the Sys::Socket::Sockaddr.
    
      method sizeof : int ()
    
    * Added the size method in the Sys::Socket::Sockaddr::Interface.
    
      method sizeof : int ()
    
    * Added the size method in the Sys::Socket::Sockaddr::In.
    
      method sizeof : int ()
    
    * Added the size method in the Sys::Socket::Sockaddr::In6.
    
      method sizeof : int ()
    
    * Added the size method in the Sys::Socket::Sockaddr::Un.
    
      method sizeof : int ()
    
    * Added the size method in the Sys::Socket::Sockaddr::Strage.
    
      method sizeof : int ()
    
    * Added the s_addr and set_s_addr methods to the Sys::In_addr class.
    
      method s_addr : int ();

      method set_s_addr : void ($s_addr : int);

    * Added the s6_addr and set_s6_addr methods to the Sys::In6_addr class.

      method s6_addr : string ();

      method set_s6_addr : void ($address : string);
    * Add Sys::Socket::Error::InetInvalidNetworkAddress.
    
  [Test Improvement]
    * Added the test of the exit method in the Sys::Process class on Windows.
    * Added the test of the execv method in the Sys::Process class on Windows.
  [Bug Fix With Incompative Changes]
    * Fixed the bug that the definitions of the sin_family and set_sin_family method in the Sys::Socket::Sockaddr::In were wrong.
      [Before]
        method sin_family : int ()
        method set_sin_family : void ()
      [After]
        method sin_family : byte ()
        method set_sin_family : void ($family : byte)
    * Fixed the bug that the definitions of the sin6_family and set_sin6_family method in the Sys::Socket::Sockaddr::In6 were wrong.
      [Before]
        method sin6_family : int ()
        method set_sin6_family : void ()
      [After]
        method sin6_family : byte ()
        method set_sin6_family : void ($family : byte)
    * Fixed the bug that the definitions of the sun_family and set_sun_family method in the Sys::Socket::Sockaddr::Un were wrong.
      [Before]
        method sun_family : int ()
        method set_sun_family : void ()
      [After]
        method sun_family : byte ()
        method set_sun_family : void ($family : byte)
    * Fixed the bug that the definitions of the ss_family and set_ss_family method in the Sys::Socket::Sockaddr::Storage were wrong.
      [Before]
        method ss_family : int ()
        method set_ss_family : void ()
      [After]
        method ss_family : byte ()
        method set_ss_family : void ($family : byte)
    * Fixed the bug that the definitions of the sa_family method in the Sys::Socket::Sockaddr and its child classes and the interface were wrong.
      [Before]
        method sa_family : int ()
      [After]
        method sa_family : byte ()
  [Bug Fix]
    * Fixed the bug that the socket_strerror method in the Sys::Socket class didn't work well.
  [Test Fix]
    * Fixed the test of the times method in the Sys::Process class.
  [Document Improvement]
    * Add the doc of the Sys::Socket::Sockaddr class.
    * Add the doc of the Sys::Socket::Sockaddr::Interface class.
  [Incompative Changes]
    * The inet_ntop method in Sys::Socket throw an exception if the address family is not AF_INET and AF_INET6.
    * The inet_pton method in Sys::Socket throw an exception if the address family is not AF_INET and AF_INET6.
    * The inet_ntop and inet_pton method in Sys::Socket throw an exception with Sys::Socket::Error::InetInvalidNetworkAddress
      if the address is an invalid network address.
    * The inet_ntoa method in Sys::Socket throw an exception if inet_ntoa failed.
    * The set_sin6_addr method in Sys::Socket::Sockaddr::In6 throw an exception if the address is not defined.
    * The set_sin_addr method in Sys::Socket::Sockaddr::In throw an exception if the address is not defined.
  [Internall Uneffective Changes]
    * Rename the has_interface in the class Sys::Socket::Sockaddr::Interface to has_interfaces.
    * Rename the has_interface in the class Sys::Socket::Sockaddr to has_interfaces.
    
0.06 2022-09-27
  [Test Fix]
    * Fix the test of the setpriority method in the Sys::Process class.
    * Fix the test of the times method in the Sys::Process class.
  [New Features]
    * Add the getaddrinfo_raw to the Sys::Socket class. This is the same as original the getaddrinfo method.
    * Add the getnameinfo_raw to the Sys::Socket class. This is the same as original the getnameinfo method.
    * Add the following methods to the Sys::Socket class.
    
      static method socket_errno : int ();
      static method socket_strerror : string ($errno : int, $length : int);
    
  [Prerequirement Changes]
    * SPVM::Sys needs SPVM 0.9653+.
  [Incompatible Changes]
    * The getaddrinfo method in the Sys::Socket class gets to throw an exception.
    * The getnameinfo method in the Sys::Socket class gets to throw an exception.
    * Rename the follwing methods in the Sys::Socket class.
      [Before]
      static method ioctl_int_portable : int ($fd : int, $request : int, $request_arg_ref : int*);
      static method poll_portable : int ($fds : Sys::IO::PollfdArray, $nfds : int, $timeout : int);
      static method close_portable : int ($fd : int);
      
      [After]
      static method ioctl_int : int ($fd : int, $request : int, $request_arg_ref : int*);
      static method poll : int ($fds : Sys::IO::PollfdArray, $nfds : int, $timeout : int);
      static method close : int ($fd : int);

0.05 2022-09-26
  [Document Fix To Fix Typo]
    * Remove native attribute from the definitions of the methods.
  [Test Improvement]
    * Add many tests.
  [Bug Fix]
    * Fix the bug that the execv method in the Sys::Process doesn't work well.
  [Incompatible Changes]
    * The name and definition of the setpgrp method in the Sys::Process.
      [Before]
      static method setpgrp : int ();
      
      [After]
      static method setpgid : int ($pid : int, $pgid : int);
      
    * The name and definition of the getpgrp method in the Sys::Process.
      [Before]
      static method getpgrp : int ();
      
      [After]
      static method getpgid : int ($pid : int);
    
0.04 2022-09-16
  [Test Improvement]
    * Add many tests.
  [Bug Fix]
    * Fix the bug that the l method in the Sys::FileTest class doesn't work well.
  [Prerequirement Changes]
    * Need SPVM::Errno 0.06+.
    
0.03 2022-09-15
  [New Features]
    * Add the getcwd method to the Sys::IO class.
    
      static method getcwd : mutable string ($buf : mutable string, $size : int);
      static method realpath : mutable string ($path : string, $resolved_path : mutable string);
      static method _getdcwd : mutable string ($drive : int, $buffer : mutable string, $maxlen : int);
    
    * Add the following methods to the Sys class.
    
      static method getenv : string ($name : string);
      static method setenv : int ($name : string, $value : string, $overwrite : int);
      static method unsetenv : int ($name : string);
    
      
  [Incompatible Changes]
    * Change the definition of the following method in the Sys::IO class.
      [Before]
        static method fwrite : int ($buffer : mutable string, $size : int, $data_length : int, $stream : Sys::IO::FileStream);
      [After]
        static method fwrite : int ($ptr : string, $size : int, $nmemb : int, $stream : Sys::IO::FileStream);
    * Change the definition of the following method in the Sys::IO class.
      [Before]
        static method truncate : long ($path : string, $offset : long);
      [After]
        static method truncate : int ($path : string, $length : long);
  [Bug Fix]
    * Fix the bug that lseek return value is wrong.
    * Fix the bug that truncate return value is wrong.
    * Fix the bug that the length argument of the truncate method in the Sys::IO class is int, not long.
  [Test Improvement]
    * Add many tests.
  [Test Fix]
    * Fix Github Action Windows 2019 test by adding ".gitattribute"
    
      # All files are binary files. CRLF is always CRLF. LF is always LF.
      * -text
    * Fix reference count tests.
    
  [Document Improvement]
    * Add the link to this repository.
0.02 2022-09-14
  [Document Improvement]
    * Add Sys::FileTest doc.
  [Incompatible Changes]
    * Remove Sys::IO->freopen.
    * Simplify the implementation of the methods for file test in Sys::FileTest
      If the file doesn't exists, an exception will be thrown except for e.

  [Changes]
    * Use access function for Sys::FileTest->e.
  [Bug Fix]
    * Fix the bug that ouble free or corruption (!prev) occur in Sys::IO->stat in Linux/Ubuntu 32bit.
0.01 2022-09-13
  
  * First experimental release