Tag: ubuntu

Ubuntu rusage错误

我正在将一些非常古老(和庞大的代码)代码从CentOS 6移植到Ubuntu 14.04。 注意,我已经安装了预期的旧版gcc,固定链接器引用等。 我的构建尝试正在进行中,但我坚持一件事。 有一个C文件试图创建一个rusage类型的结构,但Ubuntu环境给我以下错误: error: storage size of ‘rusage’ isn’t known 据我所知,我的所有路径看起来都是正确的。 我甚至查看了每个系统上的time.h和resource.h系统文件(CentOS在哪里工作,Ubuntu在哪里不起作用)。 似乎有一个wait.h文件的引用,其中rusage实际定义,只是相同。 在我的Ubuntu环境中还有什么可能遗漏的? 编辑:添加更多MCVE-ish详细信息…… 我的构建停止,出现以下错误: vmodem.c:6747: error: storage size of ‘rusage’ isn’t known 文件中的那一行很简单: struct rusage rusage 所需的包含也在该文件中( , 等) 不知道在这种情况下我还能提供什么……

在Ubuntu中的Directory中列出文件

我试图列出当前目录的父目录中的文件,但是当我尝试从终端执行此程序时,我得到分段错误..我做错了什么? 这是代码: #include #include #include int main(int argc, char *argv[]) { struct dirent *dirpent; DIR *dirp; if(argc!=2) { printf(“Cant continue with the program\n”); return 0; } dirp= opendir(argv[1]); if(dirp) { while(dirpent=readdir(dirp) !=NULL) printf(“%s\n”,dirpent->d_name); closedir(dirp); } return 0; }

为什么不能触发子进程中的信号处理程序?

我的目的是为fgets创造1秒的时间。 如果在1秒内未收到任何输入,则程序终止。 我想出的设计是:父级为SIGALRM注册一个信号处理程序。 然后它会分叉一个触发SIGALRM的孩子,然后继续调用fgets。 SIGALRM将触发杀死父进程的处理程序。 但是当我在64位的ubuntu 14.04上执行此操作时,处理程序不会被触发,程序只是等待用户永远输入fgets。 为什么会发生这种情况,我该如何解决这个问题? #include “csapp.h” void handler() { printf(“lazy man\n”); kill(SIGKILL, getppid()); exit(0); } int main() { char buf[100]; signal(SIGALRM, handler); pid_t pid; if ((pid = fork()) == 0) { alarm(1); } else { fgets(buf, 100, stdin); printf(“%s”, buf); } return 0; } 〜

如何从头文件和源文件创建一个C库(用于Ubuntu)?

我正在寻找一个程序来创建一个C库(即链接和编译文件到一个文件)基于具有以下结构的.h文件和.c文件(它是一个FEC库:www。 openfec.org)。 我正在使用Ubuntu。 我希望它在不手动指定每个文件的情况下执行此操作。 我尝试了WAF,但得到了错误’错误:root:错误:没有名为cflags的模块’。 这是(部分)结构: fec lib_advanced ldpc_from_file of_code_profile.h of_ldpc_ff.h … lib_common linear_binary_codes_utils binary_matrix it_decoding ml_decoding statistics of_cb.h of_debug.h of_mem.c of_mem.h of_openfec_api.c of_openfec_api.h of_openfec_profile.h of_types.h 谢谢!!

运行信号量的意外输出

我正在尝试编写一个程序,它会分叉另一个进程并保持同步,这样第一个进程就不会开始第(i)次迭代,直到第二个进程完成第(i-1)次迭代。 这只能使用两个信号量吗? 这是我到目前为止: #include #include #include #include #include #include sem_t semA, semB,sem,m; int main(void) { int i; pid_t child_a, child_b,pid2,pid3; sem_init(&semA, 0, 1); sem_init(&semB, 0, 0); sem_init(&m, 0, 0); child_a = fork(); //wait(); if (child_a == 0) { // int j; pid2 =getpid(); for (i = 0; i < 5; ) { sem_wait(&semA); //sem_wait(&m); printf("child1: […]

二进制文件和跨平台兼容性

我编写了一个C ++库,将我的数据(自定义结构的集合等)保存到二进制文件中。 我目前在Windows(XP)机器上本地使用(即创建和使用 )文件。 为简单起见,让我们将库分为两部分:一个编写器 (创建文件)和一个读者或消费者 (只是从文件中读取数据)。 最近,我想在我的Linux机器上使用 (即读取)我在XP机器上创建的数据文件。 我必须在这个阶段指出两台机器都是PC(因此具有相同的endianess等)。 我可以构建一个阅读器(并为Linux编译[确切地说是Ubuntu 9.10]),因为我是图书馆的创建者。 我的问题,在我踏上这条道路(建立读者等)之前是: 假设我已经成功构建了Linux的阅读器, 我可以简单地将在Windows(XP)机器上创建的文件复制到Linux(Ubuntu 9.10)机器并使用Linux阅读器成功读取复制的文件吗?