小编sho*_*nex的帖子

批处理文件编码

我想处理包含奇怪字符的文件名,比如法语é.

shell中的一切都运行良好:

C:\somedir\>ren -hélice hélice
Run Code Online (Sandbox Code Playgroud)

我知道如果我把这行放在.bat文件中,我得到以下结果:

C:\somedir\>ren -hÚlice hÚlice
Run Code Online (Sandbox Code Playgroud)

看?é已被Ú取代.

命令输出也是如此.如果我dir在shell中有一些目录,输出就可以了.如果我将此输出重定向到文件,则会转换某些字符.

那么我怎么能告诉cmd.exe如何解释我的批处理文件中出现的é,实际上是é而不是Ú或逗号?

因此,执行.bat文件时无法提供有关其编写代码页的提示?

windows encoding cmd batch-file

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

是否有无效的pthread_t id?

我想为给定的线程id调用pthread_join,但前提是该线程已经启动.安全的解决方案可能是添加一个变量来跟踪哪个线程在哪里开始.但是,我想知道是否可以检查pthread_t变量,如下面的代码.

pthread_t thr1 = some_invalid_value; //0 ?
pthread_t thr2 = some_invalid_value;

/* thread 1 and 2 are strated or not depending on various condition */
....

/* cleanup */
if(thr1 != some_invalid_value)
    pthread_join(&thr1);

if(thr2 != some_invalid_value)
    pthread_join(&thr2);
Run Code Online (Sandbox Code Playgroud)

其中some_invalid_value可以是0,或者是依赖于实现的'PTHREAD_INVALID_ID'宏

PS:我的假设是pthread_t类型具有可比性和可分配性,基于的假设

PPS:我想这样做,因为我认为在无效的线程id上调用pthread_join是未定义的行为.它不是.但是,加入以前加入的线程是未定义的行为.现在让我们假设重复调用上面的"函数".无条件地调用pthread_join并检查结果可能会导致在先前连接的线程上调用pthread_join.

linux pthreads

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

pthread_cond_wait与信号量

使用pthread_cond_wait或使用信号量的优点/缺点是什么?我正在等待这样的状态变化:

pthread_mutex_lock(&cam->video_lock);
while(cam->status == WAIT_DISPLAY) {
    pthread_cond_wait(&cam->video_cond, &cam->video_lock);
}
pthread_mutex_unlock(&cam->video_lock);
Run Code Online (Sandbox Code Playgroud)

使用正确初始化的信号量,我想我可以这样做:

while(cam->status == WAIT_DISPLAY) {
    sem_wait(&some_semaphore);
}
Run Code Online (Sandbox Code Playgroud)

每种方法的优缺点是什么?

c multithreading semaphore

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

零大小的malloc

很简单的问题,我做了以下程序:

#include <stdlib.h>
int main(int argc, char ** argv)
{
    void * ptr;
    ptr = malloc(0);
    free(ptr);
}
Run Code Online (Sandbox Code Playgroud)

它不会在我的机器上发生段错误.它是stdlib malloc的可移植行为还是免费的,还是我在寻找麻烦?

编辑:看似不可移植的是malloc返回的值.问题是关于malloc(0)+自由组合,而不是ptr的值.

c malloc

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

选择性地删除警告消息GCC

这段代码:

Int32 status;
printf("status : %x", status)
Run Code Online (Sandbox Code Playgroud)

给我以下警告:

jpegthread.c:157: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'Int32'
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过转换类型来摆脱它,但是有可能使用GCC编译器标志来摆脱那种特殊类型的警告,并仍然使用-Wall

gcc warnings

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

在编译时检查堆栈使用情况

有没有办法在C编译时知道并输出函数所需的堆栈大小?这是我想知道的:

我们来看一些功能:

void foo(int a) {
    char c[5];
    char * s;
    //do something
    return;
}
Run Code Online (Sandbox Code Playgroud)

在编译这个函数时,我想知道它被调用时会消耗多少堆栈空间.这可能对检测隐藏大缓冲区的结构的堆栈声明很有用.

我正在寻找能打印出类似内容的东西:

file foo.c:function foo stack usage是nbytes

有没有办法不看生成的程序集知道?或者可以为编译器设置限制?

更新:我不是试图避免给定进程的运行时堆栈溢出,我正在寻找一种在运行时之前查找的方法,如果编译器确定的函数堆栈使用可用作编译过程的输出.

让我们换一种说法:是否可以知道函数本地所有对象的大小?我猜编译器优化不会成为我的朋友,因为某些变量会消失但是上限很好.

c compiler-construction callstack

29
推荐指数
2
解决办法
9316
查看次数

强制驱动程序与设备匹配

我有一块USB硬件,我知道它的驱动程序.但是,供应商ID和产品ID与驱动程序中注册的VID,PID对不匹配.在linux中是否有办法强制驱动程序与已知设备关联,而不涉及内核模块重新编译以添加PID/VID对?

linux usb kernel

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

numpy:如何快速转换数组类型

我发现numpy数组的astype()方法效率不高.我有一个包含300万Uint8点的数组.将它乘以3x3矩阵需要2秒,但将结果从uint16转换为uint8需要另一秒.

更确切地说 :

    print time.clock()
    imgarray = np.dot(imgarray,  M)/255
    print time.clock()
    imgarray = imgarray.clip(0, 255)
    print time.clock()
    imgarray = imgarray.astype('B')
    print time.clock()
Run Code Online (Sandbox Code Playgroud)

点积和缩放需要2秒
剪辑需要200毫秒类型转换需要1秒

考虑到其他业务所花费的时间,我希望astype会更快.是否有更快的方式进行类型转换,或者在猜测类型转换不应该那么难时我错了吗?

编辑:目标是将最终的8位数组保存到文件中

python numpy

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

免费的PIC C编译器

我正在为PIC寻找一个免费的,可能是开源的C编译器.我可能没有C,但我想得到两个选择.

那里有各种编译器,但由于我之前从未进行过PIC开发,我正在寻找用户体验和建议.我的目标是PIC16F88x系列

pic

14
推荐指数
3
解决办法
5万
查看次数

Py_initialize/Py_Finalize没有使用numpy工作两次

在下面的代码的第二次调用,我的应用程序段错误,所以我想我错过了一些东西:

Py_Initialize();
pName = PyString_FromString("comp_macbeth");
pModule = PyImport_Import(pName);
Py_DECREF(pName);

if(pModule == NULL) {
    PyErr_Print();
    Py_Finalize();
    return;
}

pFunc = PyObject_GetAttrString(pModule, "compute");
/* pFunc is a new reference */

if (!pFunc || !PyCallable_Check(pFunc) ) {
    PyErr_Print();
    Py_Finalize();
    return;
}

Py_Finalize();
Run Code Online (Sandbox Code Playgroud)

comp_macb.py正在导入numpy.如果我删除numpy导入,一切都很好.这是一个numpy bug,还是我错过了一些关于进口的东西?

c python numpy

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