0.559 2026-02-14
  [New Features]
    * Add TCP_KEEPALIVE constant to Sys::Socket::Constant class.
    * Add set_tcp_keepidle_portable method to the Sys class to set the TCP keep-alive idle time in a portable way across Windows, Linux, and macOS.
    * On Windows, this method uses a new native method Sys::Socket#win_set_tcp_keepalive, which calls WSAIoctl with the SIO_KEEPALIVE_VALS control code to correctly configure keep-alive settings, as the standard TCP_KEEPIDLE is not supported via setsockopt.
  
0.558 2026-02-04
  [Bug Fix]
    * Fix argument order in env->die calls within native classes on Windows
    
0.557 2026-01-30
  [Requirement Changes]
    * Require SPVM 0.990120.
  [Internal Changes]
    * Use die native API in native classes instead of die_v2.
0.556 2026-01-28
  [Requirement Changes]
    * Require SPVM 0.990119.
  [Internal Changes]
    * Use die_v2 native API in native classes.
0.555 2026-01-19
  [New Features]
    * Add Sys::Time#tzset method.
  [Changes]
    * Modified the Sys#localtime method to call the Sys#tzset method.
    
  [Incompatible Changes]
    * Sys#localtime method always manipulate minus time. $allow_minus argument is removed.
    * Sys#gmtime method always manipulate minus time. $allow_minus argument is removed.
    
0.554 2026-01-18
  [Incompatible Changes]
    * Sys::Time::Timespec#new method now throws an exception if the arguments are invalid by calling the L</"check"> method.
    * Sys::Time::Timeval#new method now throws an exception if the arguments are invalid by calling the L</"check"> method.
    * Sys::Time::Util#timespec_to_nanoseconds method now throws an exception if the timespec cannot be converted to nanoseconds due to overflow.
  [New Features]
    * Add Sys::Time::Timespec#clone method.
    * Add Sys::Time::Timeval#clone method.
    * Add Sys::Time::Timespec#check method.
    * Add Sys::Time::Timeval#check method.
  [Requirement Changes]
    * Require SPVM::Math 1.006.
  [Bug Fix]
    * Fixed a bug where Sys::Time::Util#float_seconds_to_timespec method could not correctly handle negative seconds.
    * Fixed a bug where Sys::Time::Util#timespec_to_float_seconds method could not correctly handle negative seconds.
    * Fixed a bug where Sys::Time::Util#timespec_to_nanoseconds method could not correctly handle negative seconds.
    * Fixed a bug where Sys::Time::Util#nanoseconds_to_timespec method could not correctly handle negative seconds.
    
0.553 2025-12-22
  [New Features]
    * Add Sys::Process#setsid method.
0.552 2025-10-16
  [Bug Fix]
    * Fix Sys#_getdcwd bug.
    
0.551 2025-10-06
  [Bug Fix]
    * Fix a potential bug of Sys::User#getgroups method.
    
0.550 2025-08-12
  [New Features]
    * Add Sys::IO::Constant#O_ACCMODE method.
0.549 2025-08-12
  [New Features]
    * Add Sys::IO#dup method.
    * Add Sys::IO#dup2 method.
    
0.548 2025-08-12
  [Document Improvement]
    * Improve argument names of Sys#sysopen method.
  [New Features]
    * The first argument of Sys#umask method becomes an optional argument.
      This allows you to get the current umask value without setting.
    
      static method umask : int ($perms : int = -1);
    * If the permissions argument of Sys#sysopen method is omitted, it is set to 0666 & ~Sys->umask.
  [Incompatible Changes]
    * Remove FD_CLOEXEC flag from the file descriptors created by Sys#pipe method.
    * Remove FD_CLOEXEC flag from the file descriptors created by Sys#socketpair method.
    * Remove FD_CLOEXEC flag from the file descriptor created by Sys#popen method.
    * Add FD_CLOEXEC flag from the file descriptor created by Sys#sysopen method.
0.547 2025-08-11
  [Document Improvement]
    * Add Sys class links to the documents.
  [Exception Message Changes]
    * Use ' instead of " for quotes.
0.546 2025-06-02
  [New Features with Incompatibe Changes]
    * Sys->S returns a correct value in Windows.
  [Requirement Changes]
    * Require SPVM 0.990059.
  [Incompatible Changes]
    * Sys::IO::Constant#S_IFSOCK method returns a value.
    * Sys#O method throw an exception in Windows.
    * Sys#o method throw an exception in Windows.
    * The each following method throws an exception in Windows.
      Sys#O method
      Sys#g method
      Sys#k method
      Sys#o method 
      Sys#u method
      
0.545 2025-05-30
  [Bug Fix]
    * Fix potential bugs related to Windows API, such as Sys#lstat, Sys#stat, Sys#fstat, Sys#l.
  [Internal Changes]
    * Rename Sys::Windows to Sys::Resource::Windows.
      Separete Sys-Windows.h to spvm_sys_windows.h and spvm_sys_windows.c.
    
0.544 2025-05-29
  [Requirement Changes]
    * Windows must support CreateSymbolicLinkW and SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE.
      #define _WIN32_WINNT 0x0A00
  [Big Fix]
    * Fix a bug that SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE is not specified in symlink method.
    * Fix bugs related to wide character in symlink method in Windows.
  [Exception Message Improvement]
    * Exception messages related to system errors contains the value of errno.
0.543 2025-05-28
  [Bug Fix]
    * Fix bugs that Sys#stat, Sys#lstat, Sys#readlink, Sys#_realpath methods fails
      in some cases that the file is opened.
    
0.542 2025-05-27
  [Bug Fix]
    * Fix bugs.
      
      Failed test 'st_dev'
      https://github.com/yuki-kimoto/SPVM-Sys/issues/92
      
      setpriority failed on this environment
      https://github.com/yuki-kimoto/SPVM-Sys/issues/93
      
0.541 2025-05-27
  [Improvement with Incompatible Changes]
    * In this release, UTF-8 strings passed as arguments to the methods that calls Windows system calls are now handled correctly.
      Sys#opendir, Sys::IO#opendir
      Sys#closedir, Sys::IO#closedir
      Sys#readdir, Sys::IO#readdir
      Sys#rewinddir, Sys::IO#rewinddir
      Sys#telldir, Sys::IO#telldir
      Sys#seekdir, Sys::IO#seekdir
      Sys::IO::DirStream#DESTROY
      Sys::IO::Dirent#d_name
      Sys#readlink.
      Sys#lstat, Sys::IO#lstat
      Sys#stat, Sys::IO#stat
  [Incompatible Changes]
    * Remove Sys::IO::Windows#readlink method and add win_readlink method.
  
  [New Features]
    * Add Sys::IO::Windows#is_symlink method.
  [Changes]
    * Sys#l method use Sys::IO::Windows#is_symlink method.
    * Sys::IO::Windows#realpath resolve symbolic link by own and open a file as a reparse point.
  [Internal Changes]
    * Rewrite Sys::IO::Windows#lstat completly.
    * Rewrite Sys::IO::Windows#stat completly.
    * Add Sys::IO::Windows#_follow_symlinks_to method.
0.540 2025-05-23
  [Incompatible Changes]
    * Sys#readdir method returns a file name instead of a directory entry.
0.540 2025-05-23
  [Incompatible Changes]
    * Sys#readdir method returns a file name instead of a directory entry.
    
0.539 2025-05-23
  [Improvement with Incompatible Changes]
    * In this release, UTF-8 strings passed as arguments to the methods that calls Windows system calls are now handled correctly.
      Sys::IO#open
      Sys#open, Sys::IO#fopen
      Sys#chmod, Sys::IO#chmod
      Sys::IO#access
      Sys#mkdir, Sys::IO#mkdir
      Sys#rmdir, Sys::IO#rmdir
      Sys#chdir, Sys::IO#chdir
      Sys::IO#truncate
      Sys::Process#execv
      Sys#unlink, Sys::IO::Windows#unlink
      Sys#rename, Sys::IO::Windows#rename
      Sys#symlink, Sys::IO::Windows#symlink
      Sys::IO::Windows#_realpath
      Sys::IO#getcwd
      Sys::IO#_getdcwd
  [Incompatible Changes]
    * Remove Sys::IO#_fullpath method.
    * The first argument $buf of Sys::IO#getcwd must be undef. Otherwise an exception is thrown.
    * The second argument $buffer of Sys::IO#getcwd must be undef. Otherwise an exception is thrown.
  [Internal Changes]
    * Add Sys#_getcwd method only for Cwd class.
    * Add Sys#_getdcwd method only for Cwd class.
    * Add Sys#_realpath method only for Cwd class.
  [New Features]
    * Add the following methods to Sys::IO::Stat class.
      dev
      ino
      mode
      nlink
      uid
      gid
      rdev
      size
      blksize
      blocks
      mtime
      atime
      ctime
   
0.538 2025-05-21
  [Bug Fix]
    * Fix bugs that Sys::IO::Windows#realpath method failed when the file is not symbolic link.
0.537 2025-05-20
  [Incompatible Changes]
    * Sys::IO::Windows#realpath method does not return long path.
0.536 2025-05-20
  [New Features]
    * Add Sys::IO::Windows#realpath method.
  
0.535 2025-05-19
  [Bug Fix]
    * Fix bugs that Sys#rename in Windows and Sys::IO::Windows#rename do not work well.
0.534 2025-05-17
  [Bug Fix with Incompatible Changes]
    * Fix a bug that Sys->e return 0 if the file is a symbolic link.
0.533 2025-05-15
  [Fix Exception Messages]
    * Fix an exception message in Sys::IO::Stat#lstat method.
  [New Features with Incompatible Changes]
    * Sys::IO::Stat#stat method returns Perl compatible values in Windows.
    * Sys::IO::Stat#lstat method returns Perl compatible values in Windows.
    * Sys::IO::Stat#fstat method returns Perl compatible values in Windows.
    * Remove Sys::IO::Windows#lstat method.
0.532 2025-01-29
  [Requirement Changes]
    * Require SPVM 0.990042.
  [Test Improvement]
    * Call Fn#destroy_runtime_permanent_vars method in the end of tests.
0.531 2025-01-20
  [Requirement Changes]
    * Require SPVM 0.990040.
0.530 2025-01-17
  [Bug Fix]
    * Fix bugs that the following classes are not compiled in compilation time.
    
      Sys::OS
      Sys::Env
      Sys::Select::Constant
      Sys::Poll::Constant
      Sys::IO::Stat
    * Fix a bug that Sys::Time#setitimer does not work well.
    
  [Exception Changes]
    * Sys::Process#waitpid method throws an exception if $wstatus_ref is not defined.
    * Sys::Process#wait method throws an exception if $wstatus_ref is not defined.
    * Sys::Time#localtime method throws an exception if $time_ref is not defined.
    * Sys::Time#gmtime method throws an exception if $time_ref is not defined.
    * Sys::Socket#accept method throws an exception if $addrlen_ref is not defined.
    * Sys::Socket#getsockname method throws an exception if $addrlen_ref is not defined.
    * Sys::Socket#getpeername method throws an exception if $addrlen_ref is not defined.
    * Sys::Socket#recvfrom method throws an exception if $addrlen_ref is not defined.
  [Changes]
    * Add version_from Sys to all classes except for Sys class.
    * Load Resource::SocketUtil.
0.529001 2025-01-05
  [Changes]
    * Sys#rand method calls Fn#rand method.
0.529 2025-01-05
  [Requirement Changes]
    * Require SPVM 0.990035.
  [New Features]
    * Add Sys#rand method.
    * Add Sys#srand method.
  [Changes]
    * $mode argument of Sys#mkdir method is optional.
    
0.528 2024-10-17
  [New Features]
    * Add Sys::Socket::Errno#is_read_again method.
    * Add Sys::Socket::Errno#is_write_again method.
    * Add Sys::Socket::Errno#is_connect_again method.
    * Add Sys::Socket::Errno#is_accept_again method.
    
  [Cleanup]
    * Improve docs, argument names, variable names of Sys#accept method and Sys::Socket#accept method.
    

0.527 2024-10-11
  [New Features]
    * Add host option to Test::SPVM::Sys::Socket::ServerManager class.
    * Add can_bind function to Test::SPVM::Sys::Socket::Util module.
  [Test Improvement]
    * Add IPv6 tests.
  
0.526001 2024-10-09
  [Changes]
    * Remove unused Sys.config
    
0.526 2024-06-14
  [Document Improvement]
    * Improve docs for Sys::Socket::Constant class.
  [Test Improvement]
    * Restore a test for Sys::Socket#accept method in Windows.
    * Restore a test for Sys::Socket::Sockaddr::Un class in Windows.
    
0.525 2024-06-14
  [Requirement Changes]
    * Does not upgrade IO::Socket::IP.

0.524 2024-06-13
  [Requirement Changes]
    * Require IO::Socket::IP 0.42.
    * Require Perl v5.20.3.
  [New Features]
    * Add Test::SPVM::Sys::Socket module.
    * Add Test::SPVM::Sys::Socket::Server module.
    * Add Test::SPVM::Sys::Socket::ServerManager module.
    * Add Test::SPVM::Sys::Socket::ServerManager::IP module.
    * Add Test::SPVM::Sys::Socket::ServerManager::UNIX module.
    * Add Test::SPVM::Sys::Socket::Util module.
    
0.523 2024-06-10

  [Test Fix]
    * Fix tests for Sys::Stat in Sys::Stat.

      A note about stat tests: SPVM::Sys uses MinGW's stat and fstat. On the other hand, Perl's implementation is based on Windows functions.

      Also, the implementation will probably change depending on whether the Perl version uses the new Windows C runtime UCRT or the old MSVCRT.

      This means that there is a high possibility of differences in the results.

      I don't want to fail the SPVM test because of a bug in Perl's stat and fstat and MinGW's stat and fstat and Windows's _stat and _fstat.

      So for Windows, write a low-confidence test: if the value matches Perl, pass. If it doesn't, print to standard error the expected value and the result.
      
0.522 2024-06-06
  [Requirement Changes]
    * Require SPVM::Resource::SocketUtil 1.002.
  [Internal Changes]
    * struct sockaddr_un is not defined because spvm_socket_util.h has it now.
  [Support Removal]
    * SPVM::Sys does not support 32bit systems.
    
0.521 2024-06-05
  [Requirement Changes]
    * Require SPVM 0.990006.
  [Internal Changes]
    * If SPVM_SOCKET_UTIL_DEFINE_SOCKADDR_UN macro is defined, struct sockaddr_un is not declared.
0.520 2024-06-03
  [Fix Warnings]
    * Fix unneeded warning in Sys::Socket#recvfrom method.
0.519 2024-06-03
  [Incompatible Changes]
    * Change an argument of Sys#recvfrom method.
      [Before]
      method recvfrom : int ($socket_fd : int, $buffer : mutable string, $length : int, $flags : int, $sockaddr : Sys::Socket::Sockaddr, $buffer_offset : int = 0);
      
      [After]
      method recvfrom : int ($socket_fd : int, $buffer : mutable string, $length : int, $flags : int, $sockaddr_ref : Sys::Socket::Sockaddr[], $buffer_offset : int = 0);
    
0.518 2024-06-03
  [Incompatible Changes]
    * The implementation and definition of Sys::send method is replaced with the ones of Sys::send_v2 method.
    * Sys::send_v2 method is removed.
    * Changes the return type of Sys#set_real_user_id method from int to void.
    * Changes the return type of Sys#set_effective_user_id method from int to void.
    * Changes the return type of Sys#set_real_group_id method from int to void.
    * Changes the return type of Sys#set_effective_group_id method from int to void.
    
0.517 2024-05-31
  [Bug Fix]
    * Fix the bug that Sys#getpeername method may allocate a wrong size of memory.
    * Fix the bug that Sys#getsockname method may allocate a wrong size of memory.
    * Fix the bug that Sys::Socket::Sockaddr#new method may allocate a wrong size of memory.
    * Fix the bug that Sys#accept method may allocate a wrong size of memory.
  [New Features]
    * Add Sys::Socket#sendto method.
    * Add Sys::Socket#recvfrom method.
    * Add Sys#recvfrom method.
  
  [New Features that Will Removed in The Nearly Future]
    * Add Sys::send_v2 method. This will replace Sys::send and will removed.
  
  [Future Changes with Imcompatible Changes]
    * Sys#send method will be replaced with Sys#send_v2.
  [Changes]
    * Allow the $addr of Sys::Socket#sendto method undef.
    
0.516 2024-05-27
  [New Features]
    * Add push method to Sys::Poll::PollfdArray class.
    * Add remove method to Sys::Poll::PollfdArray class.
    * Add capacity field to Sys::Poll::PollfdArray class.
    * Add $capacity optional argument to Sys::Poll::PollfdArray#new method.
    
0.515 2024-05-24
  [Bug Fix]
    * May fix the bug that Sys::IO#seekdir method does not work well.
  [Exception Message Changes]
    * Exception messages in native classes are improved.
  [New Features]
    * Add the seekdir method to Sys class.
  [Changes]
    * Sys#readdir method throws an exception if the directory stream is not defined or the directory stream is already closed.
    * Sys#closedir method throws an exception if the directory stream is not defined or the directory stream is already closed.
    * Sys#rewinddir method throws an exception if the directory stream is not defined or the directory stream is already closed.
    * Sys#seekdir method throws an exception if the directory stream is not defined or the directory stream is already closed.
    * Sys#telldir method throws an exception if the directory stream is not defined or the directory stream is already closed.
    
    * Sys#fileno method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#read method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#eof method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#readline method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#getc method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#print method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#close method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#seek method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#tell method throws an exception if the stream is not defined or the stream is already closed.
    * Sys#pclose method throws an exception if the stream is not defined or the stream is already closed.
    
  [Test Improvement]
    * Add tests for Sys#opendir method, Sys#readdir method, Sys#seekdir method, Sys#telldir method, Sys#rewinddir method, Sys#closedir method.
    
0.514001 2024-03-27
  [Bug Fix]
    * Fix bug that config files cannot be parsed for SPVM version up.
0.514 2023-12-26
  [Bug Fix]
    * Fix the bug that FILE_NAME in native source file does not have the file scope.
0.513 2023-12-22
  [Incompatible Changes]
    * The first argument of the localtime and gmtime method in the Sys class becomes optional argument and allow it minus epoch time by $allow_minus optional argument.
      
      method localtime : Time::Piece ($epoch : long = -1, $allow_minus = 0);
      
      method gmtime : Time::Piece ($epoch : long = -1, $allow_minus = 0);

0.512 2023-12-08
  [New Features]
    * Add the new_with_family method class to the Sys::Socket::Sockaddr class.
    * Add the upgrade method to the Sys::Socket::Sockaddr class.
  [Incompatible Changes]
    * Remove the to_family_sockaddr method from the Sys::Socket class.
    * Remove deprecated the spvm_socket_errno method and the spvm_socket_strerror method from the Sys::Socket class.
    * The socket method in the Sys class set FD_CLOEXEC to the created socket file descriptor.
    * The socketpair method in the Sys class set FD_CLOEXEC to the created socket file descriptor.
    * The accept method in the Sys class set FD_CLOEXEC to the created socket file descriptor.
    * The connect method in the Sys class set FD_CLOEXEC to the created socket file descriptor.
  [Document Fix]
    * Fix many Sys::Socket documents.
  [Incompatible Changes]
    * Remove the Sys::Socket::Error class.
    * Sys::Socket::Error::InetInvalidNetworkAddress inherits the Error class.
    * The gai_strerror method in the Sys::Socket class throws an exception in the system call failed.
0.511 2023-12-07
  [New Features]
    * The Sys::Socket::Sockaddr::Un class work well in Windows.
    * The Sys::Socket::Addrinfo supports Sys::Socket::Sockaddr::Un in Windows.
0.510 2023-12-07
  [New Features]
    * The Sys::Socket::Sockaddr::Un class work well in Windows.
    * The Sys::Socket::Addrinfo supports Sys::Socket::Sockaddr::Un in Windows.
  [Deprecations and New Features]
    * Deprecates the spvm_socket_errno method from the Sys::Socket class and add the errno method to the Sys::Socket::Errno.
    * Deprecates the spvm_socket_strerror method from the Sys::Socket class and add the strerror method to the Sys::Socket::Errno.
  [Document Fix]
    * Add the doc of the Sys::Socket::Error class.
0.509 2023-12-04
  [Incompatible Changes]
    * The getc method in the Sys::IO throw an exception if the return value is C<EOF> and C<ferror(stream)> is non-zero.
    * The fread method in the Sys::IO throw an exception if the return value is less than $nmemb and C<ferror(stream)> is non-zero.
    * The fwrite method in the Sys::IO throw an exception if the return value is less than $nmemb and C<ferror(stream)> is non-zero.
    * The fcntl method can not recieve object type $command_arg. Only Int or Sys::IO::Flock.
    * The get_readlink_buffer_size method in the Sys::IO is removed.
    * The FILE stream open by the popen or _popen is closed automatically.
    * Remove the is_symlink method in the Sys::IO::Windows.
    * Remove the _get_readlink_buffer_size method in the Sys::IO::Windows.
  [New Features]
    * Add the lstat method to the Sys::IO::Windows class.
  [Bug Fix]
    * The l method in the Sys class work well in Windows.
0.508 2023-12-04
  [Document Fix]
    * Fix the document of the new method in the Sys::Stat class. This method do not have arguments.
  [Incompatible Changes]
    * The cando method in the Sys::Stat class becomes private. 
    * The no_close field in the Sys::IO::FileStream is renamed to no_destroy.
    * The utime method in the Sys::IO class is moved to Sys::Time class.
    * The utimes method in the Sys::IO class is moved to Sys::Time class.
    
  [Bug Fix]
    * Fix the bug that the spvm_stdin, spvm_stdout, spvm_stderr in the Sys::IO class do not return correct values.
    * Fix the bug that the STDIN, STDOUT, STDERR in the Sys class do not return correct values.
    
0.507 2023-12-01

  [New Features]
    * Add the following user/group methods to the Sys class.
    
      real_user_id

      effective_user_id

      real_group_id

      effective_group_id

      set_real_user_id

      set_effective_user_id

      set_real_group_id

      set_effective_group_id

      setpwent

      endpwent

      getpwent

      setgrent

      endgrent

      getgrent

      getgroups

      setgroups

      getpwuid

      getpwnam

      getgrgid

      getgrnam


0.506 2023-12-01
  [Incompatible Changes]
    * The definition of the localtime method in the Sys::Time is changed.
      [Before]
      static method localtime : Sys::Time::Tm ($time : long);
      [After]
      static method localtime : Sys::Time::Tm ($time_ref : long*);
      
    * The definition of the gmtime method in the Sys::Time is changed.
      [Before]
      static method gmtime : Sys::Time::Tm ($time : long);
      [After]
      static method gmtime : Sys::Time::Tm ($time_ref : long*);
    *  close-on-exec flag is set to the file stream opened by the open method in the Sys class.
  [Changes]
    * The system method in the Sys::Process class throwns an exception if the system system call fail.
    * The execv method in the Sys::Process class throwns an exception if the argument contains undef.
  [New Features]
    * Add the popen method to the Sys::IO class.
    * Add the _popen method to the Sys::IO class.
    * Add the popen method to the Sys class
    * Add the pclose method to the Sys::IO class.
    * Add the _pclose method to the Sys::IO class.
    * Add the pclose method to the Sys class.
    * Add the fork method to the Sys class.
    * Add the getpriority method to the Sys class.
    * Add the setpriority method to the Sys class.
    * Add the wait method to the Sys class.
    * Add the waitpid method to the Sys class.
    * Add the system method to the Sys class.
    * Add the exit method to the Sys class.
    * Add the getpgrp method to the Sys class.
    * Add the setpgrp method to the Sys class.
    * Add the getppid method to the Sys class.
    * Add the exec method to the Sys class.
0.505 2023-11-30
  [Incompatible Changes]
    * The timeval_interval method in the Sys::Time::Util do not throw an exception if tv_sec and tv_usec is a negative value.
    * The timespec_interval method in the Sys::Time::Util do not throw an exception if tv_sec and tv_nsec is a negative value.
  [New Features]
    * Add the subtract_timeval method to the Sys::Time::Util.
    * Add the subtract_timespec method to the Sys::Time::Util.
    
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
