我正在使用一个使用haskell库(pandoc)来完成一些工作的C库(libpandoc).C库为haskell包装器回调提供读写数据.典型的回调,我也想发送一个,void *user_data以便回调不必依赖于全局变量.
然而,在互联网上搜索,我似乎无法弄清楚如何将Haskell传递给void *变量.
还有就是CString的是一个char *(并最终被用来作为一种解决方法,但它不是那么好)和普通PTR这使得指针出来的东西.但是,这些东西似乎不包括void(这也是可以理解的).看看Foreign.C我没有看到任何有用的东西.
我的问题是,我可以使用什么类型将这样的函数传递给Haskell?
int func(char *buffer, void *user_data);
...
that_haskell_function(..., func, my_data);
Run Code Online (Sandbox Code Playgroud) 在C++中,有
#define DEBUG(A) cerr << (A) << endl;
Run Code Online (Sandbox Code Playgroud)
我可以发送任何东西,它可以打印出来.但是,在C中,我必须用%d,%c或%s等指定它的类型.但我不想一直写它的类型,我想使用fprintf像cerr.我怎样才能做到这一点?
例如:在C中
#define DEBUG(A) X // X is what I want to write
...
// in function, when I put
DEBUG(5); // I just want to print 5
// or, with same statement, when I say
DEBUG('a'); // output : a
Run Code Online (Sandbox Code Playgroud) 有没有办法在Vim中移动文件?我在Vim中打开了一个文件foo/bar.txt.我知道有两种方法来移动这个文件:
第一解决方案
:bd bar.txtmv foo/bar.txt foo/bar2.txt:e foo/bar2.txt二解决方案:
但这两种解决方案令人尴尬.我知道,有一个用于重命名文件vim-enuch的插件,但是没有Vim方式来执行这样的基本功能吗?
我做了一些搜索谷歌图片
结果是成千上万的照片.我正在寻找一个将下载第一批n图像的shell脚本,例如1000或500.
我怎样才能做到这一点 ?
我想我需要一些高级正则表达式或类似的东西.我尝试了很多东西,但无济于事,有人可以帮我吗?
好吧,这对我来说太麻烦了.我只是不知道这个任务有什么问题:
void *pa; void *pb;
char *ptemp; char *ptemp2;
ptemp = (char *)pa;
ptemp2 = (char *)pb;
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么我收到此错误:
错误:从'void*'无效转换为'char*'
我已经看到了各种各样的分散信息,但我似乎无法得到最终答案.你如何清理内核中的僵尸线程?
为了确保并在内核中生成处理线程的最终正确方法,我想更广泛地提出这个问题.如何在Linux内核中创建,终止和清理线程?
到目前为止我所拥有的是:
thread_func:
exited = 0;
while (!must_exit)
do stuff
exited = 1;
do_exit(0)
init_module:
must_exit = 0;
exited = 1;
kthread_run(thread_func, ...) /* creates and runs the thread */
cleanup_module:
must_exit = 1;
while (!exited)
set_current_state(TASK_INTERRUPTIBLE);
msleep(1);
/* How do I cleanup? */
Run Code Online (Sandbox Code Playgroud)
我发现清理解决方案最接近的是release_task,但我没有找到任何关于它的讨论.我想象,因为线程功能kthread_create,kthread_run等等,应该有一个kthread_join或kthread_wait,但是没有.do_wait似乎也有可能,但它不需要struct task_struct *.
此外,我不确定是否do_exit是一个好主意,或者如果有必要的话.有人可以提出如何创建,终止和清理kthread的最小草图吗?
我有一个表,每行解释一些东西(输入命令).在另一个地方,我说从这个输入命令的状态,你去其他状态.我想要做的是链接that input command到表的适当行.想象一下这样的事情:
...link to row number <a href="#row2">2</a>...
<table ...>
<tr>
<td>command</td>
<td>description</td>
<tr>
<tr>
<a name="row1"></a>
<td>A</td>
<td>input A</td>
<tr>
<tr>
<a name="row2"></a>
<td>B</td>
<td>input B</td>
<tr>
</table>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我尝试<a name="row2"></a>在<tr>块中放置一个但是没有用(它将我带到了表的顶部)
我想做什么?
是否有任何工具可以根据自动重新排序.c文件.h?
例如, foo.h
void function1();
void function2();
void function3();
Run Code Online (Sandbox Code Playgroud)
和 foo.c
void function2(){}
void function1(){}
void function3(){}
Run Code Online (Sandbox Code Playgroud)
我可以把它重新排序吗?
void function1(){}
void function2(){}
void function3(){}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在Ubuntu中使用Vim.
在命令中使用排除模式的要求背后的逻辑是什么git ls-files --ignored?
来自git help ls-files:
-i, --ignored仅显示输出中的忽略文件.在索引中显示文件时,仅打印与排除模式匹配的文件.显示"其他"文件时,仅显示与排除模式匹配的文件.