Articles of c + +

Linux下的串口编程

我想用电路板上的RS232端口与PC通信。 我知道我可以使用“dev / ttyS0”来达到这个目的。 我可以使用write()函数打开和写入数据到PC。 但问题是我无法从“dev / ttyS0”读取。 每次我使用阅读function,我得到“资源暂时不可用”。 你能告诉我如何解决这个问题吗? 这是我的代码: #include <stdio.h> #include <string.h> #include <fcntl.h> #include <termios.h> #include <unistd.h> int main() { int n = 0, fd = 0, bytes = 0; char ch = 0; char buffer[10], *bufPtr; int nBytes = 0, tries = 0, x = 0; struct termios term; fd […]

从struct sk_buff提取数据

我试图从struct sk_buff提取数据,但没有收到我期待的输出。 有问题的帧是34字节; 包含8字节(实验协议)头的14字节以太网报头: struct monitoring_hdr { u8 version; u8 type; u8 reserved; u8 haddr_len; u32 clock; } __packed; 在这个头之后,有两个可变长度的硬件地址(它们的长度由上面的haddr_len字段决定)。 在这个例子中,它们都是6个字节长。 以下代码正确地提取标题(结构),但不是以下两个MAC地址。 发件人方面: … skb = alloc_skb(mtu, GFP_ATOMIC); if (unlikely(!skb)) return; skb_reserve(skb, ll_hlen); skb_reset_network_header(skb); nwp = (struct monitoring_hdr *)skb_put(skb, hdr_len); /* … Set up fields in struct monitoring_hdr … */ memcpy(skb_put(skb, dev->addr_len), src, dev->addr_len); memcpy(skb_put(skb, […]

伪terminal的使用 – C

我使用特定的会话编号创build了一个pThread 。 如果pThread产生了,我试着让另一个进程运行使用openpty启动的伪terminal。 这是代码的一部分: if (openpty(&(numa_pst[session][0]),&(numa_pst[session][1]), NULL, NULL, NULL) != 0) { int err_code = errno; sprintf (line_temp, "*** ERROR: numa openpty failed with:\n%s\n", strerror(err_code)); } session = 0; int* pi = calloc(sizeof(int), 1); *pi = session; if (pthread_create(&system_wideThread[session], 0, system_wider, (void*)pi)) { int err_code = errno; sprintf (line_temp, "*** ERROR: System-wide thread spawn failed […]

我想从COM端口连续接收数据,同时要写入文件

我想读取串行COM端口并将数据写入LINUX中的文件。 其实我是从其他电脑的超级terminal发送数据。 问题是没有while循环,我只能写一行。 但while(1)循环,我不能写任何文件。 否则我必须发送BIG文件,然后应用程序退出/终止并写入文件。 我的应用程序应该写入数据(可能是2行或任何东西); 之后它必须等待下一个数据。 所以请帮我解决….. 这是我的代码 ========================================= #include <termios.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/signal.h> #include <sys/types.h> #include <assert.h> #include <string.h> #include <time.h> #define BAUDRATE B115200 #define MODEMDEVICE "/dev/ttyS0" #define _POSIX_SOURCE 1 /* POSIX compliant source */ #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; void signal_handler_IO (int status); […]

使用C ++在Linux中计算磁盘读/写

我的要求是通过总磁盘读/写操作(或读/写数据量)来分析当前进程磁盘读/写操作。 我需要先抽取样品,并在这两者之间绘制图表。 我需要在c ++中的Linux(Ubuntu 12.10)上执行此操作。 有任何可用于此任务的API /工具吗? 我发现一个工具,即iotop但我不知道如何使用这个当前进程与系统的广泛使用。 谢谢

在C中的subprocess和父进程之间的通信linux:父进程不阻塞

我想让父进程和subprocess在C使用pipe道进行通信。 首先,我想要父母传递一个string,然后孩子承认它。 我创build了两个文件描述符。 一个为父母对孩子即读音pipe和另一个反向笔pipe。 问题是它不把我的数据作为input。 另外,我希望printf语句(如“input您的数据”)被打印一次,但自fork之后,有两个进程,所以它们被显示两次。 任何替代scheme? //readpipe[0] = child read //readpipe[1]= parent write //writepipe[0]=parent read //writepipe[1]=child write #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <string.h> int main(void) { pid_t pid; int r; /* Hope this is big enough. */ char buf[1024]; char cp[50]; char ans; int readpipe[2]; int writepipe[2]; int a; int […]

可加载的内核模块编程和系统调用拦截

假设我们想拦截退出系统调用并在任何进程调用它时在控制台上输出消息。 为了做到这一点,我们必须编写自己的假退出系统调用,然后让内核调用我们的假退出函数而不是原来的退出调用。 在我们的假退出呼叫结束时,我们可以调用原来的退出呼叫。 为了做到这一点,我们必须操纵系统调用表数组(sys_call_table)。 通过使用sys_call_table数组,我们可以操纵它来使sys_exit入口指向我们新的假退出调用。 我们必须存储一个指向原始sys_exit调用的指针,并在我们将消息打印到控制台时调用它。 源代码 : #include <linux/kernel.h> #include <linux/module.h> #include <sys/syscall.h> extern void *sys_call_table[]; asmlinkage int (*original_sys_exit)(int); asmlinkage int our_fake_exit_function(int error_code) { /*print message on console every time we *are called*/ printk("HEY! sys_exit called with error_code=%d\n",error_code); /*call the original sys_exit*/ return original_sys_exit(error_code); } /*this function is called when the module is *loaded […]

embedded在应用程序中的Python解释器无法加载本地模块

我有一个应用程序静态链接到libpython.a (2.7)。 从应用程序的解释器中,我尝试导入time模块( time.so ),该模块失败: ImportError: ./time.so: undefined symbol: PyExc_IOError 所以,这个模块有没有解决的符号: nm -D time.so | grep PyExc_IOError U PyExc_IOError 我想这个符号在连接应用程序时被链接器丢弃了。 好的,我现在将libpython与所有符号链接在一起: … -Wl,-whole-archive -lpython -Wl,-no-whole-archive … 符号现在在那里: $ nm app | grep PyExc_IOError 8638348 D PyExc_IOError 08638ca0 d _PyExc_IOError 但是我仍然得到相同的导入错误。 哪里有问题?

在uint128_t整数的上下文中对hexstring进行操作

标准Linux库函数strtoull是64位。 是否存在针对在uint128_t整数上运行的Linux x86_64环境的strtoX familyfunction的实现? 可能的原型: uint128_t strtoulll(const char *nptr, char **endptr, int base); 另外,如何使用printf / sprintf打印uint128_t整数?

64位系统上的NULL定义问题

我使用gcc 4.1.2在RHEL 5.1 64位平台上运行。 我有一个实用的function: void str_concat(char *buff, int buffSize, …); 其中concat char *在可变参数列表(…)中传递,而最后一个参数应为NULL,以指定参数结束。 在64位系统上,NULL是8个字节。 现在的问题。 我的应用程序包括直接/间接2 stddef.h文件。 首先是/usr/include/linux/stddef.h ,它定义了NULL,如下所示: #undef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif 第二个是/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/stddef.h #if defined (_STDDEF_H) || defined (__need_NULL) #undef NULL /* in case <stdio.h> has defined it. */ #ifdef __GNUG__ #define NULL __null […]