小编Wan*_*uma的帖子

在C函数中声明extern变量?

我在C文件中定义了一个变量:int x我知道extern int x如果我想在其他文件中使用它,我应该用它来在其他文件中声明它.

我的问题是:我应该在其他文件中将其声明在哪里?

  1. 在所有功能之外,

    // in file a.c:
    int x;
    
    // in file b.c:
    extern int x;
    void foo() { printf("%d\n", x); }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在将使用它的功能内?

    // in file b.c:
    void foo() {
       extern int x;
       printf("%d\n", x);
    }
    
    Run Code Online (Sandbox Code Playgroud)

我的怀疑是:

  • 哪一个是正确的?或者
  • 如果两者都正确,哪个是首选?

c declaration extern variable-declaration

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

用户的cron作业在"crontab -e"之后存储在哪里?

我是root用户,我看到有很多内容/etc/crontab,我认为是root的cron作业配置.当我使用时crontab -e,我在编辑器中看不到任何内容; 在我退出之后crontab -e,我添加的内容未找到/etc/crontab.那么,root的cron作业配置存储在哪里?和其他用户?

linux

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

使用system()执行命令时如何设置环境变量?

我正在Linux上编写一个C程序,需要使用 执行命令system(),并且需要在执行该命令时设置环境变量,但我不知道在使用时如何设置环境变量system()

c linux system

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

Linux/FreeBSD上的O_DIRECT与O_SYNC

我正在编写一个在Linux和FreeBSD上运行的程序,我想确保每次write()返回时数据实际写入物理设备上的文件,这样我的数据就不会意外丢失(例如,电力丢失,过程意外中断等).

根据OPEN(2)手册页,在Linux(高于2.6)上,O_DIRECT是同步但可能有性能问题; 在FreeBSD上,O_DIRECT不能保证同步,也可能有问题.

所以,在Linux上,无论是O_DIRECTO_SYNC保证同步写入,但哪一个具有更好的性能?

在FreeBSD上,为保证同步写入,哪个选项具有最佳性能:(1)O_DIRECT+ fsync()(2)O_DIRECT | O_SYNC或(3)O_SYNC单独?

c linux freebsd

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

在 libc 中找到我的段错误发生的位置

我的 C 程序在 CentOS 5.7 上崩溃,日志如下:

kernel: [1030648.130682] myapp[16454]: segfault at 0 ip b765f683 sp bfc3fa0c error 4 in libc-2.5.so[b75ee000+157000]
Run Code Online (Sandbox Code Playgroud)

似乎对 libc 的调用导致了段错误。我如何知道段错误发生在 libc 的哪个函数中?

这是一个生产环境,没有留下任何核心转储文件;而且很少繁殖。所以,我现在能做的就是分析libc中的哪个函数(由我的程序调用)导致了这个segfault,然后我可以检查我的代码。

如果有指针可以解释这些数字的含义,那就太好了:ip b765f683, sp bfc3fa0c, error 4, b75ee000+157000。我用谷歌搜索但没有找到好的参考资料。

谢谢。

c libc segmentation-fault

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

如何限制syslog管理的日志文件的总大小?

如何限制syslog管理的日志文件的总大小?超出此大小限制(配额)时,可能应删除最早的归档日志文件.

一些日志文件是LOG_LOCALn指定的自定义文件,但我想这与配额问题无关.

谢谢!

c linux syslog

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

如何确定我在centos上拥有哪个版本的gtk+?

我正在使用 centos,我想知道确定我的 gtk 版本的正确方法是什么。我搜索并找到了一些方法,但他们给出了不同的答案,所以我很困惑。例如:我的centos有这个目录:

/usr/lib64/gtk-2.0/2.10.0

,所以版本是 2.10.0。但 ”

pkg-config --modversion gtk+-2.0

”给出了“2.18.9”。而“

rpm -qa | grep -i gtk2

”显示:

gtk2-devel-2.18.9-12.el6.x86_64
gtk2-engines-2.18.4-5.el6.centos.x86_64
gtk2-2.18.9-12.el6.x86_64
gtk2-immodule-xim-2.18.9-12.el6.x86_64
Run Code Online (Sandbox Code Playgroud)

我完全糊涂了。有人帮我吗?谢谢。

gtk

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

使用 getpwnam()/getpwuid() 结果的安全方法?

我正在研究 Linux 和 FreeBSD。当我使用getpwnam()or时getpwuid(),我得到一个指向结构的指针passwd。使用char*passwd结构成员的安全方法是什么?

手册页说这个结构是一个静态对象,但会被后续调用覆盖,所以我想安全的方法是使用strdup()来获取成员的副本char*,然后不再使用该passwd结构。

我的理解正确吗?

c linux getpwuid getpwnam

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

如何设置syslog管理的日志文件的rw权限?

我正在 freebsd 上工作(但我认为它与 linux 上的相同),并且我正在使用 syslog 来管理我的日志文件,如 /etc/syslog.conf 中所定义:

local1.notice                                   /var/log/my.log
Run Code Online (Sandbox Code Playgroud)

我注意到 my.log 默认情况下将具有 600 访问权限,但我确实希望拥有 666 权限。我怎样才能做到这一点?

谢谢。

freebsd syslog

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