我是 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。我记得它的值应该是一个更大的数字。如果这个程序有一些错误?
这看起来很正常。进程以预先打开的文件描述符开始:0 表示 stdin,1 表示 stdout,2 表示 stderr。您打开的任何新文件都应以 3 开头。如果您关闭文件,该文件描述符编号将重新用于您打开的任何新文件。
如果您在不关闭前一个文件的情况下打开另一个文件,则会是 4 个、5 个,依此类推。
有关更多信息,请访问 http://wiki.bash-hackers.org/howto/redirection_tutorial 这是针对 bash 的,但整个想法是通用的。
#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有默认值和意义