Articles of c + +

linux,C ++,xft:如何使用它?

我尝试使用Xft, 教程 ,让他们调用一个教程,看起来像写在朝鲜北方的营地…我也发现了这个。 所以让我尝试一步一步来做: // g++ XftTest.cc -lX11 -lXft `pkg-config –cflags freetype2` #include<unistd.h> #include<X11/Xlib.h> #include<X11/Xutil.h> #include<X11/Xft/Xft.h> int main() { Display *display; XftFont *font; XftDraw *xftdraw; XRenderColor xrcolor; XftColor xftcolor; display = XOpenDisplay(0); Window XP = XCreateSimpleWindow(display,DefaultRootWindow(display),0,0,360,90,0,0,0); XMapWindow(display,XP); font = NULL; /* added 6/16 */ //font = XftFontOpenName(display,0,"NorthKorea-50"); // how to check if this is good […]

使用VLC imem从内存中播放h264video文件,但接收错误“主stream错误:不能预先填充缓冲区”

我有一个加载到内存中的h264video文件,我尝试用imem参数“imem-cat = 4”播放它,这样vlc将使用访问模块来解复用video,而vlc启动并接收我的imem成功参数: [0x7f38a0000e28] access_imem demux debug: Using get(0x404e1d), release(0x404e91), data(0x7fff5b4a9430), cookie("IMEM") 这个类别也意味着我不必提供DTS和PTS。 用于VLC的imem模块没有很好的文档logging,但是我已经在几个地方发现了提示,例如 https://forum.videolan.org/viewtopic.php?t=111917 https://forum.videolan.org/viewtopic.php?f=32&t=93842 在python中使用内存中的libVLC播放video 我的imem-get函数只是简单地将缓冲区指针设置为第一次调用时的video数据,返回0,任何进一步的调用返回1表示没有更多的数据: int MyImemGetCallback (void *data, const char *cookie, int64_t *dts, int64_t *pts, unsigned *flags, size_t * bufferSize, void ** buffer) { ImemData* imem = (ImemData*)data; cookie = imem->cookieString; if(imem == NULL || imem->allBuffered==true) //indicate all data has been […]

在“分叉”进程的同时,为什么Linux内核为每个新创build的进程拷贝内核页表的内容呢?

以下讨论适用于32位ARM Linux内核。 我注意到,在分叉过程中,Linux内核将内核页表(master page table,即swapper_pg_dir )的内容复制到每个新创build进程的页表中。 问题是: 为什么打扰呢? 为什么不能为每个新创build的进程共享单个内核页表副本(关于32位ARM Linux的更高的1G部分),而不是memcpy交换页表? 这是浪费内存吗? 相关源代码(“ – >”代表函数调用): do_fork – > copy_process – > copy_mm – > dup_mm – > mm_init – > mm_alloc_pgd – > pgd_alloc – > /* * Copy over the kernel and IO PGD entries */ init_pgd = pgd_offset_k(0); memcpy(new_pgd + USER_PTRS_PER_PGD, init_pgd + USER_PTRS_PER_PGD, […]

内核模式和用户模式下的线程(和进程)有什么区别?

我的问题: 1)在现代书籍操作系统中 ,它表示线程和进程可以处于内核模式或用户模式,但并没有说清楚它们之间的区别。 2)为什么内核模式线程和进程的开关比用户模式线程和进程的开关花费更多? 3)现在,我正在学习Linux,我想知道如何在内核模式和用户模式下分别在IN LINUX SYSTEM中创build线程和进程? 4)在书现代操作系统中 ,它表示进程可能处于用户模式,但在用户模式进程中创build的线程可能处于内核模式。 这怎么可能?

是否有可能在某个二进制文件中使用vtune而不是整个二进制文件?

我正在将一个小型库的使用添加到一个现有的大型软件中,并且想要分析(在查找程序中的细节,而不仅仅是在rdtsc()或gettimeofday调用中)的开销和小型库的归属。 使用诸如rdtsc()之类的东西我可以感觉到调用我的库函数的延迟,但是我不能做延迟归因,除非我也能够看到分支是否被预测得不好,caching工作不正常等。我考虑PAPI是因为我想像在一个更大的二进制文件中查看某些硬件事件进入和退出我的库的例程,但似乎我需要一个特定的内核模块来为我工作(Linux 2.6。 18 && Intel Xeon 5570)… Vtune专门针对英特尔处理器,但它好像是用来分析性能的整个二进制文件,而不是特定的代码片段(3-4个调用到我的库中)。 有没有办法让我使用Vtune来实现我的目标,或者可能让我能够访问这样的计数器,而无需修补我的内核?

在Linux上的AIO支持

有没有人知道我可以在哪里得到有关最新的Linux内核上的内核支持aio的状态信息? 谷歌search带来的网页可能是绝望的过时。 编辑: 更具体地说,我感兴趣的是非文件相关的描述符,如pipe道和套接字。 networking上的东西表示没有支持,这是否仍然如此? 编辑2:我正在寻找类似于Windows OVERLAPPED IO

htonl()vs __builtin_bswap32()

__builtin_bswap32()用于反转字节(它用于littel / big endian问题(来自gcc))。 htonl()也用于反转字节(从主机到networking的转换)。 我检查了两个函数,他们返回相同的结果。 有没有人可以确认这两个function是一样的? (标准的refences是赞赏)

在c ++中使用ioprio_set

我正在尝试使用ioprio_set为IO调度程序提供调用线程更高的优先级。 这是在一个C ++程序中完成的。 我想要这个电话看起来像这样: ioprio_set(IOPRIO_WHO_PROCESS, 0, IOPRIO_PRIO_VALUE(IO_PRIO_CLASS_BE,0)); 手册页说ioprio_set没有Glibc包装,所以他们应该使用系统调用。 我尝试了以下内容: syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, 0, IOPRIO_PRIO_VALUE(IO_PRIO_CLASS_BE,0)); 问题是无法findmacrosIOPRIO_WHO_PROCESS,IOPRIO_PRIO_VALUE和IO_PRIO_CLASS_BE,我不知道如何用int值replace它们。 感谢您的任何build议!

用curl下载文件的C程序

我正试图用C编写一个程序来下载一些文件。 源代码: #include <stdio.h> #include <string.h> #include <curl/curl.h> #include <curl/easy.h> size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; written = fwrite(ptr, size, nmemb, stream); return written; } int main(){ if(curl_global_init(CURL_GLOBAL_ALL)){ printf("curl error. Exiting.\n"); return 1; } char links[3][100] = { "http://download.freeroms.com/nes_roms/08/big_nose_the_caveman.zip", "http://download.freeroms.com/nes_roms/02/contra.zip", "http://download.freeroms.com/nes_roms/08/super_mario_bros._(usajapan).zip"}; int n = 0, k = 0; char […]

如何查看是否从terminal或GUI运行

我试图build立一个类,如果运行使用一个shell或从一个GUI行为是一种不同的方式。 它可以使用#include“myclass.h”包含在两个表单中… 不过,在构造函数中,我想区分Shell运行和GUI运行。 我可以很容易地实现它使用一个参数,将传递给构造函数时声明它,但我想探索我的select。 我在Ubuntu上使用C ++,我的GUI使用Qt。