小编Lou*_*ang的帖子

如何检测FAT32数据区中的目录结尾?

我正在使用磁盘文件.由于目录结构中目录的大小为0,我想知道如何检测磁盘上目录文件的结尾.

DIR_Name[0] == 0x00
Run Code Online (Sandbox Code Playgroud)

上面检测目录结尾的方法似乎不可靠.我在wiki上发现FAT32中根目录的大小固定为512个条目,但其他子目录呢.我可能需要使用FAT和群集号遍历目录.

c filesystems directory fat32 fat

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

为什么我可以写一个已分配0空间的内存?

为什么我将大小为0的空间分配给数组但我仍然可以写入那段内存?

#include<stdio.h>

int main(int argc, char** argv)
{
   int * array = malloc((sizeof(int)) * 0);
   int i;
   for(i = 0; i < 10; i++)
      array[i] = i;

   for(i = 0; i < 10; i++)
      printf("%d ", array[i]);
}
Run Code Online (Sandbox Code Playgroud)

c

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

忽略父进程中的信号

我正在尝试实现一个shell程序,我希望shell程序忽略SIG_INT(ctrl + c).但是在我的程序中,孩子也忽略了SIG_INT信号,因为exec应该将子进程带到另一个程序,并且该程序应该默认处理SIG_INT信号.我应该怎么做才能在按下ctrl + c时终止子进程.

新编辑:在我的子进程块中放置信号(Certain_signal,SIG_DFL)后,我的代码运行正常.但我仍然对这项工作的方式感到困惑.这是否意味着信号和信号处理都可以通过执行命令传播?

int main(void){
signal(SIG_INT, SIG_IGN);
int result = fork();
if(result == 0){
    //child:
    //exec some programs
}
else{
    waitpid(result);
    //do something
}
Run Code Online (Sandbox Code Playgroud)

}

c signals

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

用户空间缓冲区和内核缓冲区

我最近在linux中学习文件系统.我了解到,当我们调用fopen()时,库调用将调用malloc()为FILE结构分配空间,并且在此FILE结构中将有一个I/0的缓冲区.但后来我发现写系统调用实际上是将数据写入内核缓冲区,那么这两个缓冲区之间有什么区别呢?

c linux buffer

4
推荐指数
2
解决办法
3727
查看次数

为什么malloc(1)提供多个页面大小?

我已经尝试在我的机器上使用sbrk(1)然后故意写出测试页面大小,这是4096字节.但是当我调用malloc(1)时,我在访问135152字节后获得了SEGV,这超过了一个页面大小.我知道malloc是库函数,它依赖于实现,但考虑到它最终会调用sbrk,为什么它会给出多个页面大小.谁能告诉我它的内部工作?

我的操作系统是ubuntu 14.04,我的架构是x86

更新:现在我想知道是不是因为malloc将地址返回到足以容纳我的数据的空闲列表块.但是该地址可能位于堆的中间,因此我可以继续写入,直到达到堆的上限.

c malloc sbrk

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

COBOL中的数据类型

我写了下面的程序,我很困惑,为什么当我编译程序时,我得到一个错误,说A-COL(1,1)不是数值,而显示A-COL(1,1)给我1.

   IDENTIFICATION DIVISION.
   PROGRAM-ID. TEST1.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 DIFF PIC 9(3).
       01 ARRAY.
           05 A-ROW OCCURS 99 TIMES.
               10 A-COL OCCURS 2 TIMES.
                   15 TABLE-CONTENT PIC 9(3).

   PROCEDURE DIVISION.
       MOVE 1 TO A-COL(1,1).
       MOVE 2 TO A-COL(2,1).
       DISPLAY A-COL(1,1).
       COMPUTE DIFF = A-COL(1,1) - A-COL(2,1).
       DISPLAY DIFF.
   STOP RUN.
Run Code Online (Sandbox Code Playgroud)

cobol gnucobol

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

如何在 Python 中高效计算两个高斯分布的热图?

我正在尝试生成一个热图,其中像素值由两个独立的 2D 高斯分布控制。让它们分别为 Kernel1 (muX1, muY1, sigmaX1, sigmaY1) 和 Kernel2 (muX2, muY2, sigmaX2, sigmaY2)。更具体地说,每个内核的长度是其标准偏差的三倍。第一个内核的 sigmaX1 = sigmaY1,第二个内核的 sigmaX2 < sigmaY2。两个内核的协方差矩阵都是对角的(X 和 Y 是独立的)。Kernel1 通常完全在 Kernel2 内部。

我尝试了以下两种方法,结果都不令人满意。有人可以给我一些建议吗?

方法一:

迭代地图上的所有像素值对 (i, j) 并计算由 I(i,j) = P(i, j | Kernel1, Kernel2) = 1 - (1 - P(i, j | Kernel1)) * (1 - P(i, j | Kernel2))。然后我得到了以下结果,在平滑度方面是好的。但是在我的电脑上运行需要10秒,太慢了。

代码:

def genDensityBox(self, height, width, muY1, muX1, muY2, muX2, sigmaK1, sigmaY2, sigmaX2):
    densityBox = np.zeros((height, width))
    for y in range(height):
        for x in range(width):
            densityBox[y, …
Run Code Online (Sandbox Code Playgroud)

python numpy gaussian heatmap

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

在Perl类中定义2D数组

我是Perl的新手,我试图在Perl中将2D数组定义为我的类的属性.我将我的课程定义如下,

sub new{
my $class = shift;
my $self = {};

my @board = [];
for (my $i = 0; $i < 8; $i++){
    for(my $j = 0; $j < 8; $j++){
        $board[$i][$j] = '.';
    }
}
$self->{board} = @board;
bless($self, $class);
return $self;
}
Run Code Online (Sandbox Code Playgroud)

但是后来当我尝试访问这样的电路板字段时

$self->{board}[$i][$j] = ' ';
Run Code Online (Sandbox Code Playgroud)

我说错了

Can't use string ("8") as an ARRAY ref while "strict refs" in use
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这样做的正确方法是什么?我不想只删除use strict.

arrays perl

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

标签 统计

c ×5

arrays ×1

buffer ×1

cobol ×1

directory ×1

fat ×1

fat32 ×1

filesystems ×1

gaussian ×1

gnucobol ×1

heatmap ×1

linux ×1

malloc ×1

numpy ×1

perl ×1

python ×1

sbrk ×1

signals ×1