在主函数main里调用这个函数来做什么呢?而这个函数是怎么样实现的呢?下面就来了解这个函数的功能与产现,具代码如下:

#001 void open_devnull_stdio(void)

#002 {

#003 int fd;

#004 static const char *name = "/dev/__null__";

这段代码是指明创建设备节点的名称,这是空设备。

#005 if (mknod(name, S_IFCHR | 0600, (1 << 8) | 3) == 0) {

这行是调用函数mknod来创建设备节点/dev/__null__。空节点当作输出的黑洞,只进不出,写入它的字符永远不会满。

#006 fd = open(name, O_RDWR);

这行代码是打开空设备,进行读写。

#007 unlink(name);

这行代码是从文件系统中删除一个名称。如果名称是文件的最后一个连接,并且没有其它进程将文件打开,名称对应的文件会实际被删除。

#008 if (fd >= 0) {

#009 dup2(fd, 0);

#010 dup2(fd, 1);

#011 dup2(fd, 2);

#012 if (fd > 2) {

#013 close(fd);

#014 }

#015 return;

#016 }

这段代码是用来检查是否打开空设备成功,是否重定向设备成功,如果成功就返回。

#017 }

#018

#019 exit(1);

这行代码是当创建空设备节点出错时退出。

#020 }

#021

通过上面的代码,就可以创建/dev/__null__空设备,并测试是否创建成功。

更多相关文章

  1. Android(安卓)— 手撸代码学习事件分发的过程
  2. Android培训班(73)Dex文件里类定义dvmDefineClass
  3. Android中使用OnClickListener接口实现按钮点击的低级失误
  4. android中usb设备驱动不能自动创建设备节点
  5. android_8.1 hdmi设备热插拔事件
  6. 【Android】通过Java代码替换TabHost中的drawableTop资源
  7. kotlin零基础入门(一) - kotlin的简单介绍
  8. Android培训班(72)Dex文件里类定义dvmDefineClass
  9. Android代码混淆proguard技…

随机推荐

  1. linux mint 17编译android 2.3.1错误记录
  2. android 相对布局属性说明
  3. Android解惑
  4. Android LinearLayout 嵌套 button 监听L
  5. 【Android应用】【Shape使用总结】
  6. 如何调用Android隐藏API
  7. AIDL的实现
  8. ubuntu下Android源代码模块编译
  9. [Android Develop_004] Android Backgrou
  10. Android系统服务概要