小编hor*_*rro的帖子

如何创建配置脚本?

这可能听起来像一个非常通用的问题,但在这里.

我有一个要求,以创建我的应用程序配置脚本,将生成的这种配置的结果makefile(基本configure,make,make install).我的问题是,我从哪里开始构建这个?我可以效仿一个例子吗?

linux bash makefile configure

67
推荐指数
4
解决办法
5万
查看次数

以编程方式禁用CPU核心

众所周知,在Linux中禁用逻辑CPU的方法基本上是这样的echo > 0 /sys/devices/system/cpu/cpu<number>/online.这样,您只是告诉操作系统忽略给定的(<number>)CPU.

我的问题更进一步,是否有可能不仅忽略它而是以编程方式将其关闭?我希望CPU不接收任何电源,以使其能耗为零.

我知道可以从BIOS中禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作.

linux hardware multicore processor hardware-programming

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

/ dev/mem的访问权限

我有一系列问题/dev/mem:

  1. 网上的很多文章似乎都被/dev/mem称为网关"Physical RAM".但如果我是对的,那么处理器/dev/mem的网关"Physical Address Space"可能包括许多硬件外设的控制寄存器,而不仅仅是RAM?如果我错了,请纠正我!

  2. 为了防止攻击者滥用/dev/mem和更改内核内存,CONFIG_STRICT_DEVMEM需要启用一个标志,以防止用户应用访问超过1MB的物理地址空间.我检查了我的PC(Ubuntu)上的配置文件,发现了CONFIG_STRICT_DEVMEM = y.我写了一个程序试图读取超过1 MB的物理内存,我能够阅读!没有分段错误或任何Operation NOT Permitted错误.这怎么可能?

我的程序大致如下:

fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);
Run Code Online (Sandbox Code Playgroud)

linux memory linux-kernel

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

如何从Python请求中解析JSON响应?

我正在尝试解析response.text当我request使用Python Requests库时得到的内容.例如:

def check_user(self):
    method = 'POST'
    url = 'http://localhost:5000/login'
    ck = cookielib.CookieJar()
    self.response = requests.request(method,url,data='username=test1&passwd=pass1', cookies=ck)
    print self.response.text
Run Code Online (Sandbox Code Playgroud)

当我执行此方法时,输出为:

{"request":"POST /login","result":"success"}
Run Code Online (Sandbox Code Playgroud)

我想检查是否"result"等于"success",忽略之前的任何事情.

python python-requests

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

Linux - 迁移和交换机之间的区别?

通过查看调度统计信息/proc/<PID>/sched,您可以获得如下输出:

[horro@system ~]$ cat /proc/1/sched
systemd (1, #threads: 1)
-------------------------------------------------------------------
se.exec_start                                :    2499611106.982616
se.vruntime                                  :          7952.917943
se.sum_exec_runtime                          :         58651.279127
se.nr_migrations                             :                53355
nr_switches                                  :               169561
nr_voluntary_switches                        :               168185
nr_involuntary_switches                      :                 1376
se.load.weight                               :              1048576
se.avg.load_sum                              :               343837
se.avg.util_sum                              :               338827
se.avg.load_avg                              :                    7
se.avg.util_avg                              :                    7
se.avg.last_update_time                      :     2499611106982616
policy                                       :                    0
prio                                         :                  120
clock-delta                                  :                  180
mm->numa_scan_seq                            :                    1
numa_pages_migrated                          :                  296
numa_preferred_nid                           :                    0
total_numa_faults                            :                   34
current_node=0, numa_group_id=0
numa_faults node=0 task_private=0 task_shared=23 group_private=0 group_shared=0 …
Run Code Online (Sandbox Code Playgroud)

linux multithreading scheduler linux-kernel

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

Python - 如何在for循环中使用return语句?

首先,我想为糟糕的头衔道歉,但这是我能做的最好的.我试图拍摄很多截图,希望能让它更容易理解.

所以我正在研究一个不和谐的聊天机器人,现在正在开发一个可以作为待办事项清单的功能.我有一个命令将任务添加到列表中,它们存储在dict中.但是我的问题是以更易读的格式返回列表(见图片).

def show_todo():
    for key, value in cal.items():
        print(value[0], key)
Run Code Online (Sandbox Code Playgroud)

任务存储在dict被调用的中cal.但是为了让机器人实际发送消息,我需要使用return语句,否则它只是将它打印到控制台而不是实际的聊天(见图片).

def show_todo():
    for key, value in cal.items():
        return(value[0], key)
Run Code Online (Sandbox Code Playgroud)

以下是我尝试修复它的方法,但由于我使用了返回,for循环无法正常工作.

那么我该如何解决这个问题呢?如何使用return语句将其打印到聊天而不是控制台?

请参阅图片以便更好地理解

python return function python-3.x

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

使用 TSC(时间戳计数器)计算时间

我正在尝试通过 Linux 内核模块以非常高的精度测量 Linux 内核中某些代码所花费的时间。

为此,我尝试了rdtscl(),它给出了代码中使用的时钟滴答数,如下所示:

unsigned long ini, end;
rdtscl(ini);
//some code...
rdtscl(end);
printk("time taken=%lu ticks",end-ini);
Run Code Online (Sandbox Code Playgroud)

正如我所提到的http://en.wikipedia.org/wiki/Time_Stamp_Counter,它说TSC 是自 Pentium 以来所有 x86 处理器上都存在的 64 位寄存器。那么,如果我有双核处理器,这个计数器会出现在两个内核中还是只有一个,因为它只有一个处理器但双核?

第二个问题是:我有英特尔至强 i3 处理器,它有 4 个处理器,每个处理器都有 2 个内核。然后,测量时钟滴答声,会给出单个处理器的滴答声还是所有 4 个处理器的添加?

c linux performance multiprocessing linux-kernel

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

保存指针的内存地址

我必须实现一个函数,当我分配它时返回指针的内存地址malloc().我知道malloc(value)在堆上分配一个大小的区域value.

我知道如何实现打印该指针的内存地址的代码:

    void *s = malloc (size)
    printf("%p\n",s);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将该代码打印的值保存在int或string中?我可以?如果这是一个愚蠢的问题,我很抱歉......

c unix malloc pointers

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

在python中为什么列表与list [:]不一样?

我有一个列表,ls = [0 1 2 3 4]我正在运行以下内容:

print(ls is ls[:])
Run Code Online (Sandbox Code Playgroud)

我得到的输出为False.为什么他们不是同一个名单?当我打印两个版本时,我会打印相同的列表.

python list

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

初始化变量时,物理地址会有所不同

出于某种原因,我需要知道某个变量的物理地址.尽管如此,物理地址在初始化变量后会发生变化.要获取物理地址,我使用此函数(virt_to_phys(..., uint64_t virtaddr)),这似乎正常工作.行为的一些例子:

初始化之前: virtual 0x5632692a3780 physical 0x32b2c7c780

初始化后: virtual 0x5632692a3780 physical 0x342147a780

使用这些格式化程序:

printf("virtual 0x%llx physical 0x%llx\n", &p, virt_to_phys((uint64_t) &p));
Run Code Online (Sandbox Code Playgroud)

我正在编译-O2,但我也使用过-O0没有改变,所以我猜这种行为不是优化.我也在Arch Linux中使用内核4.13.4-1执行此代码.

这可能是一个愚蠢的问题,但我无法理解这种行为背后的原因.

c linux memory heap-memory

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