Articles of 系统编程

在Linux和Windows下实现信号?

我对编程中使用信号并不陌生。 我主要工作在C / C ++和Python。 但是我有兴趣知道如何在Linux(或Windows)中实际实现信号。 在信号描述符表中的每个CPU指令之后,如果有任何注册信号被处理,操作系统是否会检查? 或者是负责这个的stream程pipe理器/调度器? 由于信号是asynchronous的,CPU指令在完成之前是否中断呢?

如何利用自己的编程语言来利用VDSO对象?

最近的Linux内核(至less在amd64上)提供了一个名为linux-vdso.so.1的魔术对象文件linux-vdso.so.1内核的系统调用接口抽象出来,允许内核select最佳的调用约定。 如果你用C写代码,glibc会自动使用这个对象。 现在,如果我想写一个程序而不使用glibc,我该如何使用这个对象呢? 它提供的接口是在什么地方logging的? 怎么样的调用约定?

struct sockaddr_un v / s sockaddr – C(Linux)

struct sockaddr与struct sockaddr_un有什么不同? 我知道我们在客户端 – 服务器模块中使用这些结构来将套接字绑定到套接字地址。我们使用一个cast操作符来接受struct sockaddr_un。 我想知道他们有多么不同/相似,为什么演员呢?

我们必须使用C“出于性能原因”

在许多语言的这个时代,对于每一项任务来说,似乎都有一种伟大的语言,我发现自己在专业上反对“ 只有C很快 ”的口头禅,在这个口号中,速度确实意味着“足够快”。 我和非常理性的开放的人一起工作,他们喜欢比较数字,我只有思想和意见。 你能帮我find通过主观意见,进入“现实世界”的方式吗? 您是否可以帮助我find有关其他语言是否可用于embedded式和(Linux)系统编程的研究? 我很可能会推出一个虚假的假设,将非常感谢研究向我展示这一点。 你能否连接或包括好的数字,以便将“这只是他/她的意见”的意见保持在最低限度。 所以这些是我特别的要求 记忆不是一个严重的限制 便携性不是一个严重的问题 这不是一个实时系统

如何仅在C中列出第一级目录?

在terminal中,我可以调用ls -d */ 。 现在我想要一个c程序来为我做这个: #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <unistd.h> int main( void ) { int status; char *args[] = { "/bin/ls", "-l", NULL }; if ( fork() == 0 ) execv( args[0], args ); else wait( &status ); return 0; } 这将是一切。 但是,当我尝试: char *args[] = { "/bin/ls", "-d", "*/", NULL […]

/ proc / pid / mem上的mmap

有没有人成功地在Linux内核2.6中映射/ proc / pid / mem文件? 我得到一个ENODEV(没有这样的设备)错误。 我的电话是这样的: char * map = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, mem_fd, offset); 我已经通过查看/ proc / pid / maps文件进行了validation,debugging时执行到达此调用时,offset的值为堆栈顶部减PAGE_SIZE。 我也通过ptracevalidation过,mmap正在将errno设置为ENODEV。

如何制作一个进程守护进程

我想了解如何使我的程序成为一个守护进程。所以我碰到的一些事情是一般来说,一个程序执行以下步骤来成为一个守护进程: 调用fork( ) 。 在父亲中,调用exit( ) 。 这可以确保原始父节点(守护进程的祖父节点)满足其子节点终止,节点守护进程的父节点不再运行,守护进程不是进程组节点。 最后一点是成功完成下一步的要求。 调用setsid( ) ,为守护进程提供一个新的进程组和会话,两者都以它作为领导者。 这也确保该过程没有关联的控制terminal(因为该过程刚创build了新的会话,并且不会分配一个)。 通过chdir( )将工作目录更改为根目录。 这是因为inheritance的工作目录可以在文件系统的任何地方。 守护进程倾向于在系统的正常运行时间内运行,并且您不想保留一些随机目录,从而阻止pipe理员卸载包含该目录的文件系统。 closures所有文件描述符。 打开文件描述符0,1和2(标准input,标准输出和标准错误)并将其redirect到/dev/null 。 #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <linux/fs.h> int main (void) { pid_t pid; int i; /* create new process */ pid = fork ( ); if (pid == […]

C / C ++如何判断一个程序是否已经在运行?

在Windows环境中,我不想同时运行两个程序实例。 有关 使用互斥锁来防止同一程序的多个实例运行安全吗?

64位Windows使用KERNEL64吗?

我正在用dumpbin查看一些库,我注意到所有的64位版本都链接到了KERNEL32。 在64位Windows上没有KERNEL64吗? 如果没有,为什么? 我所有的操作系​​统都是32位的,所以我不能只看。 谷歌search带来没有什么值得的,所以我怀疑,没有KERNEL64,但我仍然好奇,为什么这是。 编辑:我后来发现这是非常有用的。 MSDN指南x64

在Windows中以编程方式重新启动USB设备

我正在开发的一些软件需要有一个USB设备(我将它作为一个SerialPort与一个USB-to-UART桥接器进行交互)。 有时,计算机从hibernate状态重新启动后,设备未被检测到,我不能再通过其串行端口写入或读取设备。 有读/写访问设备是必要的。 我不能依靠用户采取任何行动(物理或其他),所以我需要一种方式来以编程方式重新启动设备。 我应该如何在Windows XP / Vista / 7中使用.NET框架以编程方式重新启动USB设备?