Tag: linux

无法编译GTK程序

操作系统:Fedora 18 内核:3.6.10-4.fc18.x86_64 我无法编译简单的GTK程序: #include int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; } 命令: [root@localhost dir]##gcc -o graph graph.c `pkg-config –libs –cflags gtk+-2.0` /lib64/libGL.so.1: undefined reference to _glapi_tls_Dispatch collect2: error: ld returned 1 exit status

正确使用malloc

我正在阅读的书中有一章专注于使用malloc linux函数分配空间的内存管理。 在我读这篇文章之前,我会在不分配空间的情况下编写相对较小的程 对于内存占用率低于50MB的应用程序,不对内存分配做任何事情是否可以接受? 不这样做的后果是什么?

在用C编写的Linux TCP / IP服务器中处理Ctrl-C

我目前正在研究Linux TCP / IP服务器。 服务器程序在C中运行。我正在测试它,但是每次我用Ctrl-c退出它时,它所使用的端口都没有被释放,它正在写入解锁的数据库。 如何定义在收到Ctrl + C信号时将退出的子程序?

char *来自文件时有所不同

我的C程序在FILE中存储一个shell命令输出,将它传递给一个char数组并打印它。 您不需要查看程序中的函数,因为问题出在main上。 我的shell中命令的输出是: $ cmus-remote -Q | grep ‘tag title’ | sed s/’tag title’/”/g The View From The Afternoon gdb中的char值是: 34 fclose(tmp2); (gdb) print title $4 = 0x603010 ” The View From The Afternoon\n” (gdb) n 51 char *lyric = lyrics_get(artist, title); (gdb) print title $5 = 0x603010 ” The View From The After\001\002″ 这是代码 […]

Linux Pthread库,线程参数

如果我在Linux下使用Pthread库创建线程,我需要使用函数pthread_create ,作为其中一个参数,它需要void * ,所以我可以传递一个指向某个东西,所以我的线程例程可以访问它,但它是否安全做这样的事情 {//some scope int a=5//scope variable pthread_create(&id,NULL,some_function,(void*)a); }//end of scope 在我的日常工作中: void *some_function(void *_arg) { int a=(int)arg; return NULL; } 我想做这样的事情,所以我可以保持变量的值在堆栈上,这样我就可以从我的线程例程中访问它,但我不想为单个变量创建struct或手动分配内存。 我将创建这样的几个线程,所以我想知道在这样的情况下我是否可以通过并且不使用列表或动态数组。

在解释C代码时定义了什么数值?

我正在理解程序集和C代码。 我有以下C程序,编译后只生成Object文件。 #include int main() { int i = 10; int j = 22 + i; return 0; } 我执行了以下命令 objdump -S myprogram.o 上述命令的输出是: objdump -S testelf.o testelf.o: file format elf32-i386 Disassembly of section .text: 00000000 : #include int main() { 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 10 sub […]

C – stdin缓冲区中已有数据时,在stdin上选择()

select函数阻止调用进程,直到在任何指定的文件描述符集上存在活动[…]如果读取调用不会阻塞,则认为文件描述符已准备好进行读取。 (参见: https : //www.gnu.org/software/libc/manual/html_node/Waiting-for-I_002fO.html ) 所以我预计,如果你在第一次迭代中输入一个> 4个字符的字符串,那么在下面的程序中选择将立即返回第二个…迭代。 但事实并非如此。 在第一次输出后按任何其他键之后,它继续处理所有剩余的输入。 为什么? 样本输出: ./selectTest 12345678900 Keyboard input received: 1234 A Keyboard input received: 5678 Keyboard input received: 900 Keyboard input received: A 码 #include #include #include #include int main(void) { fd_set rfds; char buf[100]; while(1) { FD_ZERO(&rfds); FD_SET(fileno(stdin), &rfds); if(-1 == select(FD_SETSIZE, &rfds, NULL, NULL, NULL)) […]

如何在Linux上使用C执行期间切换用户

我在Linux上使用C编写应用程序。 在我的应用程序中,我需要在开始时使用普通用户(非root用户)执行一些任务,同时我还需要在执行过程中与root用户执行一些任务。 顺便说一句,我无法修改普通用户的配置。 所以我无法将普通用户添加到sudoers。 我也无法修改任何操作系统配置。 我的应用程序真正做的是执行应用程序,获取其输出以进行分析。 某些应用程序需要使用root运行。 我使用multithreading并行执行和分析这些应用程序的输出,然后将每个应用程序的报告存储在一个名为Report的单例中。 我在子进程中使用execvp来调用这些应用程序。 我的应用程序的主要目的是自动化软件测试。 并且大多数任务都需要在不属于root的软件所有者中运行。 所以,问题是 如何在执行期间切换用户? 反正我是否可以在1个可执行文件中实现它? 使用POSIX API执行此操作会更好。 使用普通用户运行我的应用程序,为我的应用程序提供root密码,使用root密码切换到root。

读取sysfs GPIO输入引脚(方向为“in”)始终打印固定值(0)

在内核设备驱动程序(内核版本3.10.92 )中启用GPIO设备支持后,我想通过GPIO sysfs读取GPIO扩展器的输入引脚的值。 导出并将方向设置为“in”后,在读取时,即使在事件发生后,该值也始终为0 ,这会将引脚值更改为1 。 虽然输出方向工作正常,但我可以通过将值更改为0或1来发光LED。 GPIO sysfs中我的GPIO扩展器的基地址是184.因此,根据GPIO sysfs读取引脚号22即引脚号206,我在内核中给出的命令是 echo 206> / sys / class / gpio / export echo“in”> / sys / class / gpio / gpio206 / direction cat / sys / class / gpio / gpio206 / value(总是将值赋值为0 ) 我正在使用PCA9505 GPIO扩展器 (40个I / O引脚),它连接到MPC8308微处理器并通过mpc I2C总线控制。

使用线程,我应该如何处理理想情况下按顺序发生的事情?

我有一个图像生成器,可以从线程运行中受益。 我打算使用POSIX线程,并编写了一些基于https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal的模拟代码来测试。 在预期的程序中,当使用GUI时,我希望生成的行逐个从上到下显示(图像生成可能非常慢)。 还应注意,线程中生成的数据不是实际的图像数据。 读取线程数据并将其转换为RGB数据并放入实际的图像缓冲区中。 并且在GUI内,可以在图像生成期间改变线程生成的数据被转换为RGB数据的方式而不停止图像生成。 但是,线程调度程序无法保证线程将以我想要的顺序运行,这不幸地使得线程生成的数据的转换更加棘手,这意味着保持数组保持bool值以指示哪些行的不合需要的解决方案完成。 我应该怎么处理这个? 目前我有一个观察者线程来报告图像何时完成(实际上应该是一个进度条,但我还没有那么远,它使用pthread_cond_wait )。 和几个渲染线程一起做while(next_line()); next_line()执行互斥锁定,并在递增它并解锁互斥锁之前获取img_next_line的值。 它然后呈现该行并执行互斥锁(与第一个不同)以获得line_done对高度的检查,如果完成则发出信号,解锁并在完成时返回0或如果不完成则返回1。