Tag: linux

中断系统调用posix_memalign

我正在使用posix_memalign获得此exception。 知道为什么我们得到它吗? 提前致谢。

为什么`synchronize_rcu()`在读取锁定块内调用时没有死锁?

synchronize_rcu()用于仅等待正在进行的RCU读取端关键部分完成。 如果是这样,它应该在读取块内调用时永远被阻止。 但是,以下代码在我的linux内核上运行良好,为什么? void port_range_clean( void ) { struct port_range *p; redo: rcu_read_lock(); list_for_each_entry_rcu(p, &port_rt->ports, list) { list_del_rcu(&p->list); synchronize_rcu(); rcu_read_unlock(); kfree(p); goto redo; } }

Ubuntu和Raspbian上的Portaudio错误

我最近开始在C程序中使用PortAudio,但是我在初始化它时遇到了麻烦。 问题出在Pa_Initialize()函数中。 这是我的代码: #include “portaudio.h” #include #include main() { PaError err; err = Pa_Initialize(); if ( err != paNoError ) goto error; error: Pa_Terminate(); fprintf( stderr, “******* ERROR *******\n” ); fprintf( stderr, “Error number: %d\n”, err ); fprintf( stderr, “Error message: %s\n”, Pa_GetErrorText( err ) ); return err; } 我收到以下错误: ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to […]

如何使用ANSI转义序列设置棕色?

我可以只使用序列Esc[Value,Valuem来设置背景的棕色吗? (不仅是黑色,红色,绿色,黄色,蓝色,洋红色,青色,白色…我想要使用更多颜色)。 如何轻松实现? 我想在我的启动代码中实现它,所以我没有机会使用标准库。 我应该使用哪些参数?

从C程序中执行程序

如何在我的C程序中运行另一个程序,我需要能够将数据写入STDIN(执行程序时我必须通过stdin不止一次提供输入)编程的启动(并逐行读取) STDOUT) 我需要解决方案在Linux下工作。 通过网络我发现下面的代码: #include #include #include void error(char *s); char *data = “Some input data\n”; main() { int in[2], out[2], n, pid; char buf[255]; /* In a pipe, xx[0] is for reading, xx[1] is for writing */ if (pipe(in) < 0) error("pipe in"); if (pipe(out) < 0) error("pipe out"); if ((pid=fork()) == 0) { […]

在从该FIFO读取所有数据后,是否应从FIFO块读取?

我正在学习Linux中的管道编程,并且无法理解管道/ FIFO管理。 我写了一个小程序打开我创建的FIFO(我在执行程序之前在终端中执行了mkfifo newfifo )。 然后我反复读取并转储我的字符缓冲区。 我正在使用来自另一个终端的cmd线的echo “message” > newfifo来填充FIFO。 问题是,当我写入FIFO时,我可以在缓冲区中读取该数据,但读取不再阻塞。 我的理解是,在我从FIFO读取数据后,FIFO应为空,读取应该阻塞。 我是在考虑这个错误,还是我错误地管理了FIFO? 代码如下: #include #include #include #include #include #define NEWPIPE “./newfifo” void main() { int great_success = 0; int fd; char buffer[20]; fd = open(NEWPIPE, O_RDONLY); while (1) { great_success = read(fd, buffer, 20); if (great_success < 0) { printf("pipe failed\n"); } else { […]

libcurl imaps不返回标题字段“Content-Transfer-Encoding”或“Content-Type”

我一直在尝试手动检测电子邮件的编码,以查看我刚刚提取的电子邮件是否需要进行base64解码,但这不是一个完整的解决方案。 所以现在我首先尝试下载电子邮件的标题(字段),检查它们是什么类型的电子邮件然后继续用base64解码它,以防标题说它是base64编码的电子邮件或者只是跳过它如果是纯文本或HTML文本。 问题是用于获取这些字段的libcurl命令实际上不起作用,大多数情况下“Content-Type”只返回一个空字符串或者说它是一个多部分/替代,但当我手动检查电子邮件时它是只是一个明显不需要解码的纯文本。 “Content-Type”字段multipart / alternative通常有不同的部分,如text,html,base64编码文本,附件等。 在multipart / alternative的情况下, “Content-Transfer-Encoding”字段根本不返回任何内容,这是我最重要的标题字段,可以让我知道它包含的内容。 我对Gmail帐户的imaps请求如下所示: curl_easy_setopt(curl, CURLOPT_URL,”imaps://imap.gmail.com:993/INBOX;UID=33;SECTION=HEADER.FIELDS%%20(Content-Transfer-Encoding%%20Subject%%20From%%20Content-Type)”); 哪个返回: 主题:我的主题来自:myname内容类型:multipart / alternative; 边界= “001a114930a049c6da05dskdls9” 如您所见,它不会返回“Content-Transfer-Encoding”字段。 此电子邮件实际上仅包含单词“Yup”,因此当通过单击浏览器中的“显示原始”消息进行检查时,它是纯文本而无附件。 系统信息:Linux,C,libcurl,gmail

在Linux中断处理程序中创建一个小延迟

我正在与硬件设计小组合作开发一个中断处理程序,我们正试图弄清楚bug的位置。 我正在以5khz的速度读取SPI总线上的芯片。 芯片加载4个字节并触发数据就绪引脚。 我的中断处理程序唤醒并从SPI总线读取4个字节并将数据存储在缓冲区中。 但奇怪的是,每17次读取都会给出所有0的4个字节,这是不对的。 我们正在探索的一个选项是,当芯片发送数据就绪信号时,它并不总是准备就绪。 所以,我知道我无法在中断处理程序中睡觉,但我想尝试引入10或20微秒的延迟。 现在我有一个计数到100,000的for循环然后处理中断。 我没有看到任何变化,所以我想我可能会看到有人有更好的技术来忙碌等待。 或者至少是一种更好的方法来确定我应该经历多少循环迭代,因为我不确定这需要多长时间,或者编译器是否只是优化了整个事情。

如何从内部获取指向程序的特定可执行文件部分的指针? (也许和libelf一起)

我在Linux环境中,我需要创建一个程序来检索放置在其可执行文件的一个部分中的一些数据。 那么,如何从内部获取指向程序某一部分(通过其名称)的指针? 我知道可以使用elf_getdata()传递section的索引作为get和Elf_Data结构的参数,这个结构的一个字段是d_buf ,它是指向实际数据的指针。 但是,似乎elf_getdata()函数将段数据的副本从文件复制到内存中,这不是我想要的。 我想要一个指向加载时加载到内存中的数据的指针。 伙计们,任何想法?

clGetProgramBuildInfo不打印构建日志

我在OpenCL中编写了一个代码。 构建内核程序时出错。 错误代码是-11。 我尝试打印BUILD LOG但它没有打印正确的日志,而是生成一些随机变量。 这是那部分 //these are variable declarations cl_device_id* devices; cl_program kernelprgrm; size_t size; //these varaibles have already been assigned properly //main code clGetProgramBuildInfo(kernelprgrm,devices[i], CL_PROGRAM_BUILD_LOG ,0,NULL,&size); char *buildlog=(char*)malloc(size); clGetProgramBuildInfo(kernelprgrm,devices[i], CL_PROGRAM_BUILD_LOG ,size,buildlog,NULL); printf(“\n\nBuildlog: %s\n\n”,buildlog); 它给出了以下输出: – Buildlog: 0 请帮助我获取正确的构建日志。 谢谢