Tag: linux

有趣的可执行文件的二进制转储

出于某种原因,我在C中创建了简单的程序来输出给定输入的二进制表示: int main() { char c; while(read(0,&c,1) > 0) { unsigned char cmp = 128; while(cmp) { if(c & cmp) write(1,”1″,1); else write(1,”0″,1); cmp >>= 1; } } return 0; } 编译后: $ gcc bindump.c -o bindump 我做了简单的测试来检查程序是否能够打印二进制文件: $ cat bindump | ./bindump | fold -b100 | nl 输出如下: http : //pastebin.com/u7SasKDJ 我怀疑输出看起来像随机系列的1和0。 但是,输出部分似乎更有趣。 例如,看看第171行和第357行之间的输出。我想知道为什么与可执行文件的其他部分相比有很多零 […]

从另一个程序控制C守护程序

我正在尝试从另一个用户空间程序控制C守护程序。 – 简单的C守护进程 这个守护进程只是一个C程序,它通过syslog每秒守护自己并记录一条消息。 #include #include #include #include #include void bye(); int main() { printf(“Daemon starting …\n”); openlog(“daemon-test”, LOG_PID, LOG_DAEMON); signal(SIGTERM, bye); if(0 != daemon(0, 0)) { syslog(LOG_ERR, “Can’t daemonize\n”); return EXIT_FAILURE; } syslog(LOG_INFO, “Daemon started !\n”); while(1) { syslog(LOG_INFO, “Daemon alive\n”); sleep(1); } return EXIT_SUCCESS; } void bye() { syslog(LOG_INFO, “Daemon killed !\n”); exit(EXIT_SUCCESS); […]

从用户空间应用程序调用内核空间中的用户定义函数

我在我的设备驱动程序中编写了一个用户定义的函数,我想从用户空间应用程序中调用它。 我该如何实现这一目标? 我所说的用户定义函数是除了内核定义函数之外的任何函数。 在struct file_operations定义的指针,如下所示。 struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct […]

在单个线程中使用循环缓冲区的可能性

我有一个UDP线程,它通过来自不同多路复用流的recvmmsg系统调用读取多个数据报,并将它们推送到不同的循环/环形缓冲区。 这些环形缓冲区是Stream结构的一部分。 每个流每20ms发送一个语音帧。 因此UDP数据包可能如下所示:F1S1 F1S2 F1S3 F2S1依此类推或者如果出现突发情况,它可能如下所示:F1S1 F2S1 F3S1 F1S2,依此类推。 在接收之后,这些数据包将由一个按照ITP原理工作的库并行处理。 UDP线程必须将这些parllel任务与要处理的数据包列表一起分派。 这里的限制是任务不能从SAME流并行处理两个帧。任务必须有自己独立的内存用于帧处理。 所以我需要确保这些帧的FIFO执行顺序,这将在我产生这些任务之前在UDP线程中完成。 目前,当我收到这些数据包时,我查找streamId并将帧放在循环缓冲区中,该缓冲区是带有for_loop的Stream Strctures的一部分。 这是代码,显示UDP线程中发生的事情。 while (!(*thread_stop)) { int nr_datagrams = recvmmsg(socket_handle->fd_udp, datagramS, VLEN, 0, NULL); ….. for (int i = 0; i circBuff.seqNum[codecPtr->circBuff.newestIdx] = _seq_num; // Update the entry pointer to point to the newest frame codecPtr->circBuff.entries = codecPtr->circBuff.entries + codecPtr->circBuff.newestIdx * […]

pthread参数的值已更改

这是我的主要function,其中NO_RECIEVERS = 3 。 我试图使用我发送的i的值来区分编写器和读取器线程。 int main() { int status, i; pthread_t tr[NO_RECIEVERS], tw[NO_SENDERS], bd; i=1; for(i=1; i<=NO_SENDERS; i++) { pthread_create(&tw[i-1], NULL, writer, &i); } for(i=1; i<=NO_RECIEVERS; i++) { printf("%d\n", i); pthread_create(&tr[i-1], NULL, reader, &i); } pthread_create(&bd, NULL ,daemon_thread, NULL); for(i=1; i<=NO_SENDERS; i++) { pthread_join(tw[i-1], NULL); } for(i=1; i<=NO_RECIEVERS; i++) { pthread_join(tr[i-1], NULL); } pthread_join(bd, […]

如何计算fork进程的位置

如何在代码中添加计数器,以便能够计算每个进程的位置。 现在我得到以下输出: Process Pid: 6179 PPid: 4378 (position: ?). Process Pid: 6181 PPid: 6179 (position: ?). Process Pid: 6180 PPid: 6179 (position: ?). Process Pid: 6185 PPid: 6180 (position: ?). Process Pid: 6183 PPid: 6181 (position: ?). Process Pid: 6182 PPid: 6181 (position: ?). Process Pid: 6184 PPid: 6180 (position: ?). 我想要的是能够在树中输出Pid位置: Process Pid: 6179 […]

通过好看改变所有过程的好处

我正在使用Debian,有没有办法根据当前的好处改变所有正在运行的进程的优点? 例如,更改所有当前正在运行的流程,这些流程的优点为-20或-19到-10。 Renice可以为某些用户更改流程和流程。 但据我所知,根据当前的好处,它无法做到。 我正在尝试运行一个具有-20美好程度的程序来尝试绕过一些似乎半定期发生的时间峰值。 这些可能是由具有相同优先级的某些进程占用资源引起的。 我本来希望用一些漂亮的东西来检查这个。

获取已安装程序的编译信息

我需要获取用于构建已安装程序的C编译器的信息。 我猜rt或者lib可以报告,但没有具体的。 并不是程序将安装在/usr/…或类似的地方,因此无法访问构建目录以获取相关信息。

linux-kernel模块最大分配内存

我想编写一个模块,其任务是捕获传入的数据包,而不将它们发送到用户空间应用程序并对捕获的数据包进行一些修改。 然后该模块将发送此数据包以传输到NIC。 但主要的问题是我的模块尺寸非常大而且还进行了大量的处理。 因此,在内核模块内部进行此处理是好的,还是应该将信息和数据包传递给用户空间进行处理以避免复杂性。 &我这样做只是为了快速获取数据包处理。 所以最大化linux内核模块可以分配多少内存。

libyahoo分段错误

我写了这段代码: #include #include int main() { int id ; char username[255] = “slam”; char password[255] = “ss” ; id = yahoo_init(username, password); enum yahoo_status mYahoo ; mYahoo = YAHOO_STATUS_AVAILABLE ; yahoo_login(id , mYahoo ); return 0; } 编译它, gcc -l yahoo2 yc -o yahoo并用./yahoo运行它给我一个错误: Segmentation fault (gdb) run Program received signal SIGSEGV, Segmentation fault. 0x001379b1 […]