在树中构建内核驱动程序时,我在drivers目录中运行make,这里KERNELDIR是内核源代码的路径,或者是头文件.
make -C $(KERNELDIR) M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
在尝试使用以下方法构建标头时:
make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR)
Run Code Online (Sandbox Code Playgroud)
我觉得不适合出口建立一个反模块(不完整的内核源代码树)的几个文件和文件夹似乎丢失,就像一个Makefile文件,脚本,include/generated/autoconf.h或include/config/auto.conf等
Debian以一种可用的方式处理事务,如rules.real中所描述的那样,尽管它的描述不仅仅是描述的Documentation/make/headers_install.txt,似乎不是"标准"方式.
简而言之:我如何正确导出linux头文件,以便我可以针对它构建外部模块?
我有一个填充了文件名和路径的bash变量:
SONG="~/Music/Mine/Cool Title Bro.flac"
Run Code Online (Sandbox Code Playgroud)
在我尝试使标记变得更加容易的过程中,我对变量应用了一些转换以隔离标题:
echo "${SONG#\~/Music/Mine/}" # which prints: Cool Title Bro.flac
Run Code Online (Sandbox Code Playgroud)
我知道也可以删除后缀${SONG%%.flac}.
但是,是否可以在单个操作中删除前缀和后缀?
这个:
${SONG#\~/Music/Mine/%%.flac}
Run Code Online (Sandbox Code Playgroud)
大概是因为它试图将文字%%.flac作为前缀的一部分进行匹配.反过来不起作用(%%.flac#~/[...]),我甚至疯了似试
${${SONG#~/Music/Mine/}%%.flac}
Run Code Online (Sandbox Code Playgroud)
这也行不通.
这可能是我工程过度工程的一个主要例子,但是如果有办法做到这一点并且我还没有弄清楚它会很好.
我正在从最低优先级的线程写入USB磁盘,使用分块缓冲区写入,但仍然有时系统整体滞后于此操作.如果我只禁用写入磁盘,一切正常.我不能使用Windows文件操作API调用,只能写C.所以我想也许有一个WinAPI函数来打开/关闭USB磁盘写缓存,我可以结合使用FlushBuffers或类似的替代方案?操作的驱动器数量未定义.
理想情况下,我希望永远不会使用写调用和缓存,如果它将透明地执行也是可以的.
编辑:会_O_SEQUENTIAL在只写操作上标记在这里有用吗?
png_read_info (png_ptr, info_ptr);
{
png_byte color_type = info_ptr->color_type;
png_byte bit_depth = info_ptr->bit_depth;
...
Run Code Online (Sandbox Code Playgroud)
我得到的最后两行
错误:取消引用指向不完整类型的指针
怎么了?在libpng 1.4中,这总是好的.
首先,看看这个例子(我为了举例而做了这个,它不是一个真正的程序):
whatever.h
#ifndef WHATEVER_H
#define WHATEVER_H
void fill(void);
#endif
Run Code Online (Sandbox Code Playgroud)
main.c中
#include <stdio.h>
#include "whatever.h"
char *names[10] = {NULL};
int main()
{
int i;
fill();
for (i = 0; i < 10; ++i)
printf("%s\n", names[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
whatever.c
#include "whatever.h"
extern char **names;
void fill(void)
{
int i;
for (i = 0; i < 10; ++i)
names[i] = "some name";
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下程序制作此程序:
gcc -o test main.c whatever.c -Wall -g
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误或警告.但是,当我运行程序时,我看到了fill,names实际上是NULL.如果在whatever.c我改变
extern char …Run Code Online (Sandbox Code Playgroud) 我很惊讶string plus boolean有类似三元操作的效果:
int apple = 2;
printf("apple%s\n", "s" + (apple <= 1));
Run Code Online (Sandbox Code Playgroud)
如果apple <= 1,它将打印苹果.为什么这样做?
我试图在scanf中使用scanset做一些东西但是卡在某处.
我写的时候
char s1[250];
scanf("%[A-Z]s",s1);
input : AHJHkiuy
Output: AHJH
Run Code Online (Sandbox Code Playgroud)
有了这个,
scanf("%[^\n]s",s1);
input: abcd ABCD hie
output: abcd ABCD hie /*that is reading white space also (till \n) */
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如果我提供输入:
ABCDahaj ahajABCD ajak12347ab
Run Code Online (Sandbox Code Playgroud)
并希望输出为:
ABCDahaj ahajABCD ajak
Run Code Online (Sandbox Code Playgroud)
那么格式字符串应该如何写?也就是说,如何使用这个扫描设备?
有没有显示我当前vim环境的所有键盘映射的有序列表,如下所示:
a: append
b: back one word
c: ...
.
.
.
---- Ctrl mappings ----
<C-a> (I dont know...)
.
.
.
<C-p> Default mode for CrtlP
...
---- Alt mappings ----
...
Run Code Online (Sandbox Code Playgroud)
这对我来说非常有用.
我问这个是因为我正在编写一个使用C库的C++程序.该库具有foreach回调(自然)的功能.显然,库会将我的回调称为C函数.
首先,这与C与C++的链接有什么关系?
如果确实如此,这样的有效和正确吗?
extern "C" static bool callback(/*parameters*/)
{
cout << "C++ thing inside the function" << endl;
/* etc */
}
Run Code Online (Sandbox Code Playgroud) 在微控制器代码中,我使用的是生产者提供的库,其中定义了许多常量.如果我的一些常量(与微控制器外部的组件共享git-subtree)和微控制器常量之间存在不匹配,我试图给出错误.
例如,库定义:
#ifdef SOME_PARTICULAR_MODEL
#define FLASH_BLOCK_SIZE ((uint8_t)64)
/* else, other models */
#endif
Run Code Online (Sandbox Code Playgroud)
在某处,在微控制器代码和PC上编译的一些代码之间共享的标题中,我有例如:
#define MYPROG_BLOCK_SIZE 64
Run Code Online (Sandbox Code Playgroud)
为了确保这些常量匹配,在微控制器代码中,两个常量都存在,我有:
#if MYPROG_BLOCK_SIZE != FLASH_BLOCK_SIZE
#error "mismatch between actual block size and defined block size"
#endif
Run Code Online (Sandbox Code Playgroud)
这是为了确保代码是否曾被移植到更大的微控制器,共享头也将被更新.
问题是这会减少到:
#if 64 != ((uint8_t)64)
Run Code Online (Sandbox Code Playgroud)
我不确定它是否是有效的C,但仍然使编译器窒息.测试时,我发现问题不在于它uint8_t是一个typedef而且它仍然会被一个强制转换扼杀到int例如.
有没有办法(uint8_t)从定义为的值中删除该部分((uint8_t)64)?如果没有,有没有办法改变它,所以表达式变成一个没有演员?
我考虑过定义uint8_t为某种东西并在之后取消定义#if,但我无法弄清楚如何避免其演员性质(Y)X并将其转化为算术表达式.