AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1141160
Accepted
qwr
qwr
Asked: 2019-05-08 00:19:28 +0800 CST2019-05-08 00:19:28 +0800 CST 2019-05-08 00:19:28 +0800 CST

GNOME 文件如何实现复制对话框?

  • 772

对于简单的任务,我使用 GNOME 文件 (Nautilus) 来复制文件而不是 rsync。我尝试挖掘我不熟悉的源nautilus-file-operations.ccp ,并且我假设它使用自己的自定义实现(不是)进行错误处理和report_copy_progress?我不知道实际的系统调用发生在哪里。

gnome nautilus
  • 1 1 个回答
  • 119 Views

1 个回答

  • Voted
  1. Best Answer
    qwr
    2019-07-02T12:44:22+08:002019-07-02T12:44:22+08:00

    我相信所有 GNOME 文件操作都使用 GFiles,根据描述:

    GFile 是用于在虚拟文件系统上操作文件的高级抽象。GFile 是轻量级的不可变对象,在创建时不执行 I/O。有必要了解 GFile 对象并不代表文件,而只是文件的标识符。所有文件内容 I/O 都实现为流式操作(请参阅 GInputStream 和 GOutputStream)。

    所以 I/O 实际上是在ginputstream.c和goutputstream.c中实现的,在g_input_stream_read之类的函数中,但这依赖于一些读取函数 GInputStreamClass class->read_fn,这取决于程序是否从套接字、本地文件、win32 文件流式传输,可轮询流等(我的猜测)

    对于本地文件(我实际上找不到本地文件的定义,但我假设它是来自磁盘的文件),g_local_file_input_stream_read我们终于read 在第 158 行找到了系统调用:

    static gssize
    g_local_file_input_stream_read (GInputStream  *stream,
                    void          *buffer,
                    gsize          count,
                    GCancellable  *cancellable,
                    GError       **error)
    {
      GLocalFileInputStream *file;
      gssize res;
    
      file = G_LOCAL_FILE_INPUT_STREAM (stream);
    
      res = -1;
      while (1)
        {
          if (g_cancellable_set_error_if_cancelled (cancellable, error))
        break;
          res = read (file->priv->fd, buffer, count);
          if (res == -1)
        {
              int errsv = errno;
    
          if (errsv == EINTR)
            continue;
    
          g_set_error (error, G_IO_ERROR,
                   g_io_error_from_errno (errsv),
                   _("Error reading from file: %s"),
                   g_strerror (errsv));
        }
    
          break;
        }
    
      return res;
    }
    

    同样的write调用g_local_file_output_stream_write:

    static gssize
    g_local_file_output_stream_write (GOutputStream  *stream,
                      const void     *buffer,
                      gsize           count,
                      GCancellable   *cancellable,
                      GError        **error)
    {
      GLocalFileOutputStream *file;
      gssize res;
    
      file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
    
      while (1)
        {
          if (g_cancellable_set_error_if_cancelled (cancellable, error))
        return -1;
          res = write (file->priv->fd, buffer, count);
          if (res == -1)
        {
              int errsv = errno;
    
          if (errsv == EINTR)
            continue;
    
          g_set_error (error, G_IO_ERROR,
                   g_io_error_from_errno (errsv),
                   _("Error writing to file: %s"),
                   g_strerror (errsv));
        }
    
          break;
        }
    
      return res;
    }
    
    • 0

相关问题

  • 如何安装 KDE?

  • 为什么我的时钟、指示器小程序和通知区域有时会在我重新启动时移动?我怎样才能防止这种情况?

  • 停止菜单图标闪烁

  • 是否有适用于 IMAP 邮件帐户的 Gnome 小程序?

  • 如果顶部面板中缺少会话小程序,如何注销?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve