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

wwtsj6pe  于 2023-05-28  发布在  Linux
关注(0)|答案(3)|浏览(184)

我是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 仅使用触摸命令创建。程序的输出是:

var fd = 3
perror output:: Success

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

pod7payv

pod7payv1#

这似乎很正常。进程从预先打开的文件描述符开始:0表示标准输入,1表示标准输出,2表示标准错误。打开的任何新文件都应以3开头。如果您关闭一个文件,该文件描述符编号将重新用于您打开的任何新文件。

pnwntuvh

pnwntuvh2#

如果您打开另一个文件而不关闭前一个文件,则将是4,5,依此类推。
欲了解更多信息,请访问http://wiki.bash-hackers.org/howto/redirection_tutorial这是为bash,但整个想法是通用的。

byqmnocz

byqmnocz3#

#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:STDERR(标准误差)

相关问题