code: def _FetchLinuxFlags(self):
      
      if platform.system() != "Linux":
        return 0
  
      # Since we open a file in the next step we do not want to open a symlink.
      # `lsattr` returns an error when trying to check flags of a symlink, so we
      # assume that symlinks cannot have them.
      if self.IsSymlink():
        return 0
  
      # Some files (e.g. sockets) cannot be opened. For these we do not really
      # care about extended flags (they should have none). `lsattr` does not seem
      # to support such cases anyway. It is also possible that a file has been
      # deleted (because this method is used lazily).
      try:
        fd = os.open(self._path, os.O_RDONLY)
      except (IOError, OSError):
        return 0
  
      try:
        # This import is Linux-specific.
        import fcntl  # pylint: disable=g-import-not-at-top
        # TODO: On Python 2.7.6 `array.array` accepts only byte
        # strings as an argument. On Python 2.7.12 and 2.7.13 unicodes are
        # supported as well. On Python 3, only unicode strings are supported. This
        # is why, as a temporary hack, we wrap the literal with `str` call that
        # will convert it to whatever is the default on given Python version. This
        # should be changed to raw literal once support for Python 2 is dropped.
        buf = array.array(compatibility.NativeStr("l"), [0])
        # TODO(user):pytype: incorrect type spec for fcntl.ioctl
        # pytype: disable=wrong-arg-types
        fcntl.ioctl(fd, self.FS_IOC_GETFLAGS, buf)
        # pytype: enable=wrong-arg-types
        return buf[0]
      except (IOError, OSError):
        # File system does not support extended attributes.
        return 0
      finally:
        os.close(fd)
docs: Fetches Linux extended file flags.