Linux的一个特殊的设备文件----/dev/null

/dev/null是一个特殊的空设备文件,在Linux系统中,向它写入的数据会消失,而读取则只会得到NULL。这个文件常用于重定向程序的标准输出或错误,以避免输出信息,比如在守护进程中。通过Shell命令可以轻松实现将标准输入、输出或错误重定向到/dev/null。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、/dev/null设备文件的基本概述

/dev/null文件称为 空设备文件(伪文件),也被称为位桶(黑洞)。
他就像一个无底洞一样,我们一般对它有两种操作如下:


    写操作:你对这个文件进行写入数据的操作,写进的数据就没了不会保存在文件中,凭空消失了
    读操作:你对这个文件进行读取数据的操作,这个文件会无限的NULL。

验证/dev/null是一个文件

在这里插入图片描述

从系统的输出信息中,我们可以看到这个文件的大小是0字节大小,所有人都有读写权限,没有执行权限。
另外,它还是个 字符驱动设备文件(character special files)。

二、空设备文件null的作用

当我们运行程序时只想输出程序的标准出错信息,而不想输出其他信息,可以把程序的标准输出重定向到这个空设备文件里面。具体代码示例如下:
以下代码是一个可应用域守护进程,一个守护进程在创建的时候需要把自己的标准输入和标准输出重定向到这个文件里面不需要输出任何信息,
变成后台运行的进程。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define  NULL_DEVICE_FILE_PATH "/dev/null"


int main()
{

    if(close(STDIN_FILENO) == -1)//关闭标准输入
    {
        perror("clsoe ... ");
        return -1;
    }

    if(close(STDOUT_FILENO) == -1)//关闭标准输出
    {
        perror("close ...");
        return -1;
    }


    //打开/dev/null 空设备文件(伪文件)

    int null_fd = open(NULL_DEVICE_FILE_PATH,O_RDWR);
    if(null_fd == -1)
    {
        perror("open null file ... ");
        return -1;
    }

    int new_stdin_fd,new_stdout_fd;
    if((new_stdin_fd = dup((long)(NULL))) == -1)//从定向标准输入
    {
        perror("dup ..");
        return -1;
    }


    if((new_stdout_fd = dup((long)(NULL))) == -1)//从定向标准输出
    {
        perror("dup ..");
        return -1;
    }

    while(1)
    {

        sleep(1);
        perror(" hello ");
        printf("hello...\n");
    }
    
    return 0;
}

通过Shell命令实现把标准输入和输出重定向到/dev/null文件中

system("1> /dev/null");  将标准输出重定向到   /dev/null 
system("2> /dev/null");  将标准错误重定向到   /dev/null 
system("2>&1 /dev/null");将输出和错误重定向到 /dev/null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值