标签: buffer

C read() 和 write() while 循环

这是示例代码:

int nbajt; int buf[];

 // we opened file and get descriptor fd

 while ((nbajt = read(fd, buf, 5)) > 0) {
        if (write(fd2, buf, nlbajt) == -1) {
            perror("ERROR");
            exit(1);
        }
    } 
Run Code Online (Sandbox Code Playgroud)

我不明白当我们使用 while 循环时它是如何工作的。这个循环会进行多少次?(长度的倍数buf?)。每个循环步骤后是否nbajt只有10 + buf文件位置的值会更改 1 个位置?因此,在第一步中,nlbajt = 1我们将 buf 第一个位置 char 写入,然后将其写入fd2?。最后我们有nlbajt==0所以这意味着它是文件的结尾?我将不胜感激检查我是否错了。我主要关心的是 nbajt 值如何变化。这种态度有何不同:

nbajt = read(fd, buf, 5));
write(fd2, buf, sizeof(a));
Run Code Online (Sandbox Code Playgroud)

c buffer system file-descriptor

1
推荐指数
1
解决办法
2万
查看次数

C#处理标准输出延迟

从 C# 表单中,我正在运行一个进程,其启动信息类似于将控制台输出重定向到单独程序中的文本框,并且C# 在运行时获取进程输出,该进程运行正确,但输出需要很长时间才能出现在DataReceived 事件中。

我希望在流程生成后立即看到文本;根据流程标准输出无法捕获?(第一条评论)我需要等到 2 到 4 kb 的缓冲区填满后才能触发事件。

根据要求,这是代码:

void pcs_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
    if (!string.IsNullOrEmpty(e.Data)) 
        textBox1.BeginInvoke((Action)delegate { textBox1.AppendText(text + "\n"); });
}

private void LER_Go_Click(object sender, EventArgs e)
{
    // variables LiDARExtRep contains the full path to an executable file
    // that runs in DOS and produces verbose output.
    // LER_Path.Text is the parameter passed to LiDARExtRep (only one arg for this example)
    ProcessStartInfo pStartInfo …
Run Code Online (Sandbox Code Playgroud)

c# forms buffer stdout process

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

最佳文件输出缓冲区大小是多少?

例如,请参阅下面的代码。size是1MB,当然比它是1时运行得更快。我认为这是由于IO系统调用的数量减少了。这是否意味着我将始终受益于更大的缓冲区大小?我希望如此并进行了一些测试,但似乎有一些限制。size为 2 时会比为 1 时运行得快得多,但不会走得更远。

有人可以更好地解释这一点吗?最佳缓冲区大小可能是多少?为什么我不能从无限扩大它的规模中获益呢?

顺便说一句,在这个例子中,我为简单起见而写入stdout,但我也在考虑何时写入磁盘中的文件。

enum
{
  size = 1 << 20
};

void fill_buffer(char (*)[size]);

int main(void)
{
  long n = 100000000;
  for (;;)
  {
    char buf[size];
    fill_buffer(&buf);
    if (n <= size)
    {
      if (fwrite(buf, 1, n, stdout) != n)
      {
        goto error;
      }
      break;
    }
    if (fwrite(buf, 1, size, stdout) != size)
    {
      goto error;
    }
    n -= size;
  }
  return EXIT_SUCCESS;
error:
  fprintf(stderr, "fwrite failed\n");
  return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

c c++ io buffer

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

Node.js 缓冲区垃圾回收

buf.slice([开始[,结束]])

返回一个新的 Buffer,它引用与原始缓冲区相同的内存,但通过开始和结束索引进行偏移和裁剪。

注意,修改新的Buffer切片会修改原Buffer中的内存,因为两个对象分配的内存是重叠的。

如果引用之一消失,垃圾收集器如何处理分配的内存?

buffer garbage-collection node.js

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

使用 PIL.Image.frombuffer() 保存 RGBA 图像

我需要保存由 numpy 数组制成的透明图像。我可以使用以下命令保存图像:

img = Image.fromarray(data, 'RGB')
Run Code Online (Sandbox Code Playgroud)

但我需要它是透明的,所以我尝试用以下方法保存它:

img = Image.fromarray(data, 'RGBA')
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误:

File "/home/pi/Documents/Projet/GetPos.py", line 51, in click
 img = Image.fromarray(data, 'RGBA')
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2217, in 
fromarray
 return frombuffer(mode, size, obj, "raw", rawmode, 0, 1)
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2162, in 
frombuffer
 core.map_buffer(data, size, decoder_name, None, 0, args)
ValueError: buffer is not large enough
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,但对于我想做的简单事情来说,一切看起来都非常复杂......有人可以帮助我吗?

这是我的完整代码(我对 python 还很陌生:)):

mouse = pymouse.PyMouse()
posX, posY = mouse.position()
print(mouse.position())

w, h = 1920, 1080
data = np.zeros((h, w, 3), dtype=np.uint8)

for x …
Run Code Online (Sandbox Code Playgroud)

python buffer python-imaging-library rgba raspberry-pi3

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

如何在 Node.js 10 中从缓冲区读取/写入 bigint?

我看到节点 10 支持 BigInt。但是,Buffer 类中没有 ReadBigInt() 功能。

有可能以某种方式绕过它吗?也许读取 2 个整数,将它们转换为 BigInt,移动上面的一个并将它们相加以重建 bigint?

buffer bigint node.js

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

C#中的ArrayPool创建方法

我在 C# 中使用 ArrayPool。我想创建自己的池,最大数组数量为 5,最大数组大小为 1050000。我使用了这个 ArrayPool.Create() 方法。我无法理解一件事 - 我试图在下面的代码片段中从池中租用 10 次,尽管我指定最大数组为 5,那么为什么它没有显示任何错误。另外,我指定最大长度为 1050000。那么我如何能够租用 4200000 的阵列而不出现任何错误?

        byte[] buffer;
        ArrayPool<byte> pool = ArrayPool<byte>.Create(1050000, 5);

        for (int i = 0; i < 10; i++)
        {
            buffer = pool.Rent(4200000);
        }
Run Code Online (Sandbox Code Playgroud)

c# buffer compiler-optimization

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

向 MTKView 提供像素缓冲区

这是我的问题:我想显示我计算到 MTKView 的像素缓冲区。我搜索了 MTLTexture、MTLBuffer 和其他 Metal 对象,但我找不到任何方法来呈现像素缓冲区。我看到的每个教程都是关于使用顶点和片段着色器呈现 3D 对象。

我认为缓冲区必须在drawInMTKView函数内呈现(也许使用 MTLRenderCommandEncoder),但同样,我找不到任何有关此的信息。

我希望我没有问一个显而易见的问题。

谢谢

macos buffer pixel ios metal

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

在 C 中,默认情况下 stdin 的缓冲状态是什么?

这可能是一个完全错误的问题,或者至少是迂腐的问题,但我正在研究 K&R,并且正在阅读本文档:文件输入/输出

尽管它声明流具有缓冲状态,但它没有提及默认情况下标准输入处于什​​么状态。

默认情况下是行缓冲吗?它是具体实施的吗?

运行此代码似乎表明它是行缓冲的:

#include <stdio.h>

main()
{
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c buffer stdin

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

将原始像素数组绘制到窗口上(C++ WinAPI)

我有两个缓冲区,大小和类型都相同 ( uint32_t*)。这些缓冲区应该代表渲染/绘图系统的前缓冲区和后缓冲区。它们存储 32 位像素数据。

我使用以下方式声明并初始化这些缓冲区:

private:
    ...
    uint32_t* frontBuf;
    uint32_t* backBuf;
    size_t    gbufSize;
    ...
public:
    void Initialize() {
        ...  
        // prepare for rendering
        gbufSize = sizeof(uint32_t) * w * h;
        backBuf  = (uint32_t*)malloc(gbufSize);
        frontBuf = (uint32_t*)malloc(gbufSize);
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我还使用以下方法获取控制台的输出、窗口和设备句柄Initialize()

        // get handles
        cwd = GetDC(GetConsoleWindow());
        chd = GetStdHandle(STD_OUTPUT_HANDLE);
        cwn = GetConsoleWindow();
Run Code Online (Sandbox Code Playgroud)

然后我有几个绘图方法,比如一个SetPixel方法:

    size_t GFlatten(int x, int y) {
        return y * h + x;
    }

    void GSetPixel(int x, int y, uint32_t color) {
        backBuf[GFlatten(x, …
Run Code Online (Sandbox Code Playgroud)

c++ graphics winapi buffer drawing

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