小编Bra*_*tes的帖子

无论如何从命令行获取c程序的返回值?

我理解如果我写一个bash脚本我可以获得返回值,但是无论如何在没有脚本的情况下得到返回值,只是命令行?

c linux

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

如何创建没有整个目录结构的zip文件

我正在尝试创建一个zip文件,并希望保留大部分目录结构,但不保留命令行定义的rootdir.我正在使用的命令是:

zip -r out.zip /foo/bar/
Run Code Online (Sandbox Code Playgroud)

我希望它通过bar递归并添加具有保留目录结构的所有文件(它确实如此).但是我不希望'foo'成为创建的zip文件中的顶级目录.我希望bar成为顶级目录.

有什么简单的方法可以解决这个问题吗?我意识到我可以在压缩之前更改目录以避免问题,但我正在寻找一个不需要这个的解决方案.

linux zip

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

无论如何要查看预处理器定义的宏列表?

我想看看我正在使用的编译器调用定义的所有宏.有没有办法做到这一点?我在手册中看到它说你可以使用,cpp -dM 但这对我不起作用.也许我做错了什么?

当我跑:

cpp -dM
Run Code Online (Sandbox Code Playgroud)

我从预处理器中得不到任何输出.如果我尝试-dM在gcc上添加选项,我没有注意到任何差异.

macros gcc codesourcery c-preprocessor

10
推荐指数
2
解决办法
4363
查看次数

在python中使用ctypes方法会产生意外错误

我对python和ctypes很新.我正在努力完成一项看似简单的任务,但却得到了意想不到的结果.我正在尝试将字符串传递给ac函数,所以我使用的是c_char_p类型,但它给了我一条错误消息.简单来说,这是最新发生的事情:

>>>from ctypes import *
>>>c_char_p("hello world") 
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string or integer address expected instead of str instance
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

python ctypes

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

有没有办法将syslog消息重定向到stdout?

我有一个可以在两种模式下运行的应用程序,可以是CLI,也可以是守护进程.

我正在syslog()用于记录.但是,在CLI模式下运行时,我希望所有日志记录(标记除外)都将LOG_DEBUG消息发送到控制台而不是记录.

我试图使用setlogmask(),但似乎没有重定向到控制台.

做这个的最好方式是什么?

c linux syslog

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

是否使用一个编译器与另一个编译器兼容创建静态c库

在我的例子中,我有一个使用代码源gcc定位arm cortex-m4构建的库.我试图将该库链接到使用IAR编译器编译的项目.

是否可以这样做或者是否必须使用新工具重建库?哪些因素会影响这个?

c linker gcc iar

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

为什么 systemd 启动的进程的行为与交互启动时的行为不同?

我有一个程序,它生成一个实时线程,代码如下:

schparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
getrlimit(RLIMIT_RTPRIO , &rlim);
rlim.rlim_cur = schparam.sched_priority;
setrlimit(RLIMIT_RTPRIO , &rlim);
result = pthread_setschedparam(pthread_self(),SCHED_FIFO, &schparam);
if(result != 0 )
    printf("failed to set priority\n");
Run Code Online (Sandbox Code Playgroud)

我的默认系统限制不允许 RT 调度线程,因此我需要调用 setrlimit 来提高此值。当我登录到 root shell 并手动启动程序时,上面的代码可以按预期工作。

但是,当我让 systemd 在启动时自动启动程序时,计划设置失败并出现权限错误。从返回值和进程内对 getrlimit 的后续调用来看,setrlimit 调用似乎有效。但是 pthread_setschedparam 调用似乎没有意识到限制已经增加。

当我手动启动程序时,这一切都工作正常。我在这里缺少什么?

linux pthreads systemd

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

API API设计思想中的C void指针

我正在开发一个大型项目,作为静态库和一个头文件提供给我们的客户,该头文件包含我们公开的API的原型.该项目有两个相似但独特的构建,需要在标题中公开不同的数据结构.我试图提出最好的设计,允许单个API函数根据构建使用不同的数据结构.到目前为止,这是我的想法,但我担心这是一个糟糕的设计.

我的功能将像这样实现

void foo(void *generic_data_struct)
{
#ifdef BUILD1
   build1_t *data_struct = generic_data_struct;
#else
   build2_t *data_struct = generic_data_struct;
#endif
...
}
Run Code Online (Sandbox Code Playgroud)

并且,根据客户订单的构建,公开的API标头也将是

void foo(build1_t *data_struct);
Run Code Online (Sandbox Code Playgroud)

要么

void foo(build2_t *data_struct);
Run Code Online (Sandbox Code Playgroud)

这是一个合理的设计模式还是不赞成?谢谢!

c

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

linux进程调度策略如何与线程调度策略相关?

我在线程与进程调度之间有点混淆.

我已经阅读了有关流程调度策略的内容

http://man7.org/linux/man-pages/man2/sched_getscheduler.2.html

我读过有关线程调度的内容

http://man7.org/linux/man-pages/man3/pthread_getschedparam.3.html

线程是否从其进程继承调度策略?是否可以将进程调度设置为SCHED_OTHER,然后将该进程的一个线程设置为SCHED_FIFO?我独立理解策略但不了解线程/进程关系.有没有洞察力?

c linux pthreads

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

为什么我不能对空指针的强制转换进行算术运算?

void foo(void *ptr, int numBytes)
{
    (char*)ptr += numBytes;
}
Run Code Online (Sandbox Code Playgroud)

这不能用 C 编译。我知道另一种选择。但为什么这不起作用?问题是什么?

c

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

标签 统计

c ×6

linux ×5

gcc ×2

pthreads ×2

c-preprocessor ×1

codesourcery ×1

ctypes ×1

iar ×1

linker ×1

macros ×1

python ×1

syslog ×1

systemd ×1

zip ×1