Questions tagged «systems-programming»


9
为什么要在memset上使用bzero?
在上学期的系统编程课程中,我们必须用C语言实现一个基本的客户端/服务器。在初始化结构(如sock_addr_in或char缓冲区(我们用来在客户端和服务器之间来回发送数据)时,指示我们仅使用bzero而不memset初始化它们。他从不解释原因,我很好奇这是否有正当理由吗? 我在这里看到:http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown这bzero是更有效的,由于一个只能将要归零记忆的事实,所以也没有必须做memset可能做的任何其他检查。不过,这似乎仍不一定是绝对不memset用于清零内存的原因。 bzero被视为已弃用,而且不是标准C函数。根据该手册,由于这个原因,它memset是首选bzero。那么,为什么还要使用bzero完memset呢?仅仅是为了提高效率,还是更多?同样,memset超过的收益有什么好处bzero,使其成为较新程序的事实上的首选选择?

7
如果指向的文件被移动或删除,Linux上的打开文件句柄会怎样?
如果指向文件同时获得,Linux上的打开文件句柄会发生什么: 移开->文件句柄保持有效吗? 删除->这是否导致EBADF,指示无效的文件句柄? 替换为新文件->该文件是否处理指向该新文件的操作? 由指向新文件的硬链接代替->我的文件可以“跟随”该链接吗? 由指向新文件的软链接代替->我的文件句柄现在是否命中了该软链接文件? 为什么问这样的问题:我正在使用热插拔硬件(例如USB设备等)。可能会发生设备(以及它的/ dev / file)被用户或另一个Gremlin重新连接的情况。 处理此问题的最佳做法是什么?


2
如何制作进程守护进程
我试图了解如何使我的程序成为守护程序,因此遇到的一些事情通常是程序执行以下步骤来成为守护程序: 致电fork( )。 在家长中,致电exit( )。这样可确保原始父级(守护程序的祖父母)对它的子级终止,守护程序的父级不再运行以及该守护程序不是进程组负责人感到满意。最后一点是成功完成下一步的要求。 调用setsid( ),为守护程序提供一个新的进程组和会话,两者均将其作为领导者。这也可以确保该进程没有关联的控制终端(因为该进程只是创建了一个新会话,并且不会分配一个会话)。 通过将工作目录更改为根目录chdir( )。这样做是因为继承的工作目录可以在文件系统上的任何位置。守护程序通常会在系统正常运行的时间内运行,并且您不想保持某些随机目录打开,从而阻止管理员卸载包含该目录的文件系统。 关闭所有文件描述符。 打开文件描述符0、1和2(标准输入,标准输出和标准错误),然后将它们重定向到/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 == -1) return -1; else …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.