linux编程:文件描述符的值始终为3

问题描述 投票:0回答:3

我是 Linux 编程新手。我写了一个非常简单的程序:

#include stdio.h
#include fcntl.h
#include sys/ioctl.h
#include mtd/mtd-user.h
#include errno.h

int main( void )
{
    int fd;

    fd = open("test.target", O_RDWR);
    printf("var fd = %d\n", fd);
    close(fd);
    perror("perror output:");

    return 0;
}

test.target 是使用 touch 命令创建的。程序的输出是:

var fd = 3
perror output:: Success

我尝试打开其他文件,文件描述符总是3。我记得它的值应该是一个更大的数字。如果这个程序有一些错误?

linux unix file-descriptor
3个回答
9
投票

这看起来很正常。进程以预先打开的文件描述符开始:0 表示 stdin,1 表示 stdout,2 表示 stderr。您打开的任何新文件都应以 3 开头。如果您关闭文件,该文件描述符编号将重新用于您打开的任何新文件。


4
投票

如果您在不关闭前一个文件的情况下打开另一个文件,则会是 4 个、5 个,依此类推。

有关更多信息,请访问 http://wiki.bash-hackers.org/howto/redirection_tutorial 这是针对 bash 的,但整个想法是通用的。


0
投票
    #include <fcntl.h>
    #include <stdio.h>
    
    int main(void)
    {
        int     fd1;
        int     fd2;
        char    buffer1[] = "a.txt";
        char    buffer2[] = "b.txt";
    
        fd1 = open(buffer1, O_WRONLY);
        fd2 = open(buffer2, O_WRONLY);
        printf("%d\n", fd1);
        printf("%d\n", fd2);
    }

您可以创建两个不同的文件(a.txt 和 b.txt),当您使用 open() 时,它将获得不同的文件描述符,对我来说,我有 3,4

3
4

因为0,1,2有默认值和意义

  • 0:STDIN(标准输入)
  • 1:STDOUT(标准输出)
  • 2:标准错误 (标准错误)
© www.soinside.com 2019 - 2024. All rights reserved.