code: def add_real_file(self, source_path, read_only=True, target_path=None):
          
          target_path = target_path or source_path
          source_path = make_string_path(source_path)
          target_path = self.make_string_path(target_path)
          real_stat = os.stat(source_path)
          fake_file = self.create_file_internally(target_path,
                                                  read_from_real_fs=True)
  
          # for read-only mode, remove the write/executable permission bits
          fake_file.stat_result.set_from_stat_result(real_stat)
          if read_only:
              fake_file.st_mode &= 0o777444
          fake_file.file_path = source_path
          self.change_disk_usage(fake_file.size, fake_file.name,
                                 fake_file.st_dev)
          return fake_file
docs: Create `file_path`, including all the parent directories along the
          way, for an existing real file. The contents of the real file are read
          only on demand.
  
          Args:
              source_path: Path to an existing file in the real file system
              read_only: If `True` (the default), writing to the fake file
                  raises an exception.  Otherwise, writing to the file changes
                  the fake file only.
              target_path: If given, the path of the target direction,
                  otherwise it is equal to `source_path`.
  
          Returns:
              the newly created FakeFile object.
  
          Raises:
              OSError: if the file does not exist in the real file system.
              IOError: if the file already exists in the fake file system.
  
          .. note:: On most systems, accessing the fake file's contents may
              update both the real and fake files' `atime` (access time).
              In this particular case, `add_real_file()` violates the rule
              that `pyfakefs` must not modify the real file system.