Tag: linux

使用while()和sleep()将程序置于睡眠模式之间的区别

我创建了一个共享对象,并从两个不同的程序访问它并测量时间。 DATA数组是两个进程之间的共享对象。 案例1:在program1中使用while program1: access shared DATA array ;// to load into memory and avoid page fault during access time calculation start=timer; access shared DATA array end=timer; Time_needed= end-start printf(“Inside Program1, Time1=%d\n”,Time_needed); start=timer; access shared DATA array end=timer; Time_needed= end-start printf(“Inside Program1, Time2=%d\n”,Time_needed); while(1){}; // I replace this by sleep(1000) in CASE-2 计划2: access shared […]

将共享库编译成程序?

我写了一个程序,它使用我系统上安装的共享库。 该库很少安装在其他系统上。 如何编译我的程序,以便不需要在其他系统上安装库? 我有可用的库的源代码。 什么是最好的方式? 其他系统当然具有相同的架构和操作系统。

SIGCHLD是在Linux上的SIGCONT上发送的,而不是在macOS上发送的

在主要过程中,我听SIGCHLD: signal(SIGCHLD, &my_handler); 然后我fork() , execv()并让它在后台运行(例如/ bin / cat)。 当我尝试从终端向子进程发送SIGSTOP时, my_handler() 。 但是当我尝试向它发送SIGCONT时,处理程序不会在macOS上调用,而是在我的Ubuntu上执行。 人: SIGCHLD:儿童身份已发生变化。 我错过了什么吗? 这是预期的行为吗? 我在Ubuntu上编写了我的应用程序,并期望它也可以在mac上运行。 我也试过sigaction() ,但结果相同。 这是一个示例代码,用于演示: #include #include #include #include #include #include void my_handler(int signum) { printf(“\t SIGCHLD received\n”); fflush(stdout); } void my_kill(pid_t pid, int signum) { printf(“Sending %d\n”, signum); fflush(stdout); kill(pid, signum); printf(“Sent %d\n\n”, signum); fflush(stdout); } int main() […]

使用可装入内核模块修改framebuffer(/ dev / graphics / fb0)参数

问题:我必须配置Android平台使用的各种LCD显示器。 几乎在所有情况下,没有可用于LCD显示器的电气规格。 但通过经验和逆向工程,可以很好地猜测参数。 我正在尝试使用可加载内核模块来微调显示参数(欢迎任何其他建议)。 请在下面找到相关信息。 HW: Atmel SAMA5D31-EK(ARM 5处理器) SW:来自board-dt.c文件的Andriod Linux(目标),Ubuntu(主机系统),Sourcery CodeBench(交叉编译器)代码片段 static struct fb_videomode at91_tft_vga_modes[] = { ….. .xres =435; .yres =235; …. } static struct fb_monspecs at91fb_default_monspecs = { ……… .modedb = at91_tft_vga_modes, …… } static struct atmel_lcd_fb_info __initdata ek_lcdc_data = { ………. .default_monspecs = & at91fb_default_monspecs; ……… } 我添加了此代码,以便可加载内核模块可以访问lcdc_data结构 extern void set_fb_video(struct […]

Linux终端中的游戏:更改图像:打印已打印的文本

好吧,我只是在linux终端中实现非常简单的纸牌游戏。 我想要实现的是改变图像的效果,基本上是对已经打印的文本进行打印(我想我不能做,除了用\ r \ n重印相同的行)。 我想要做的是获得终端高度,然后打印换行符直到终端的下边缘,然后将光标定位在终端,以便打印的最后一行将在顶部。 有没有很好的方法来做到这一点? 我刚刚找到了名为Ncurses的库。 似乎它可以做到这一点。 这是一个不错的选择吗?

如何在gcc的编译时识别x86与x86_64?

我想仅在x86和x86_64 linux上编译我的部分代码,而不是s390 linux或其他。 如何在C中使用宏定义来实现呢? 我知道linux是确定linux OS,而386,486和586确定CPU架构。 是否有一个简单的宏定义来确定x86 linux和x86_64 linux? 谢谢

从C中获取终端的所有输出

我目前正在开发一个ssh程序,我希望能够通过网络完全控制终端。 我的问题是,如果我向服务器发送命令以在终端中运行,我如何获得终端打印的输出? 我看过许多post说要使用popen()命令,但是从我尝试的内容中我无法更改目录并使用此命令执行其他命令,只有ls等简单的事情。 除了将其发送到诸如command > filetoholdcommand类的文件之外,还有其他方法可以从终端获取输出。 提前致谢!

用fopen打开文件的ftruncate

平台是ARM上的Ubuntu Linux。 我想写一个字符串到一个文件,但我想每次都截断文件然后写字符串,即没有追加。 我有这个代码: f=fopen(“/home/user1/refresh.txt”,”w”); fputs( “{“some string”,f); fflush(f); ftruncate(fileno(f),(off_t)0); flcose(f); 如果我运行它然后检查文件,它将是零长度,当打开时,它将没有任何内容。 如果我删除了fflush调用,它将不会为0(将为11),当我打开它时,其中会有“some string”。 这是正常行为吗? 我调用fflush没有问题,但我想在循环中执行此操作并调用fflush可能会大大增加执行时间。

如何确定使用哪种D-Bus绑定

如果屏幕保护程序正在运行或屏幕被锁定,我正试图检测所有Linux。 人们推荐dbus。 所以现在我试图用x11或C API自动检测什么样的dbus可用,然后使用它。 像qdubs,gdbus等? 谢谢

fmemopen和open_memstream有什么区别?

在阅读关于字符串流的GNU文档时,我发现了两个类似的函数,它们执行非常类似的操作: FILE * fmemopen (void *buf, size_t size, const char *opentype) FILE * open_memstream (char **ptr, size_t *sizeloc) 从阅读文档,似乎open_memstream应该用于打开输出流和fmemopen用于输入。 抓住我的是你可以传递给fmemopen 。 linux手册页解释说 : 如果将buf指定为NULL,则fmemopen()会动态分配一个缓冲区大小为bytes的字节。 这对于想要将数据写入临时缓冲区然后再次读取的应用程序非常有用。 关闭流时,将自动释放缓冲区。 请注意,调用者无法获取指向此调用分配的临时缓冲区的指针(但请参阅下面的open_memstream())。 那么,如果fmemopen可以处理打开输入/输出流,那么使用open_memstream fmemopen什么意义呢?