小编MrC*_*Cat的帖子

将外部存储器解释为Lisp存储器(反之亦然),而不复制数据

我尝试使用数据库API C函数(例如db-write-chunk)将BLOB逐块写入数据库。此函数将指向外部存储器(放置块)的指针作为参数。因此,我为块创建了缓冲区:foreign-buffer。我将采取从一个文件块的数据(或二进制流)read-sequencestream-buffer

(let ((foreign-buffer (foreign-alloc :uchar 1024)))
      (stream-buffer ((make-array 1024 :element-type '(unsigned-byte 8))))
    (loop
        for cnt = (read-sequence stream-buffer MY-STREAM)
        while (> cnt 0)
        do
          ;; copy cnt bytes from stream-buffer into foreign-buffer 
          ;; call db-write-chunk with foreign-buffer
Run Code Online (Sandbox Code Playgroud)

LBLOB中的“ Large”表示“大”,循环可能会迭代多次。除此之外,所有这些代码都可以由外部循环包装(例如,批量插入)。因此,我想最小化循环主体中的步骤数。

为此,我需要:

是否可以仅使用单个缓冲区(本机缓冲区或外部缓冲区)解决我的问题,而无需在它们之间复制内存?

common-lisp cffi

5
推荐指数
1
解决办法
76
查看次数

标签 统计

cffi ×1

common-lisp ×1