6
votes

Peut-on avoir plus de descripteurs de fichiers autre que l'habituel stdin / stdout / starr (0, 1, 2)?

pouvons-nous attribuer à n'importe quel fichier un numéro de descripteur de fichier en réalité?


1 commentaires

Dans de larges limites, oui . Les limites larges incluent garder un œil sur ulimit -n (le nombre maximal de descripteurs de fichier ouverts autorisés).


3 Réponses :


6
votes

Oui, vous pouvez. Mais il appartient au programme en question si cela fait quelque chose avec elle.

$ cat fd_in.c 
int main()
{
    unsigned char buf[16];
    write(5,buf,read(6,buf,16));
}
$ gcc fd_in.c 
$ ./a.out 6< file 5>&1
test


0 commentaires

1
votes

Comme vous avez marqué cela avec Bash, voir Advancedbash pour les bases .

La section ci-dessous de ce lien (exemple 20-2) a le suivant P>

LOGFILE=logfile.txt
exec 6>&1           # Link file descriptor #6 with stdout.
                    # Saves stdout.
exec > $LOGFILE     # stdout replaced with file "logfile.txt".


0 commentaires

4
votes

Oui, en bash, vous pouvez utiliser descripteur de fichier code> pour la lecture et / ou l'écriture et peut utiliser n'importe quel numéro. Cependant, strong>, depuis 0 fort>, 1 fort> et 2 fort> est utilisé pour stdin fort>, Stdout fort> et stardr strong>, nous évitons ceux-ci. De plus, les chiffres supérieurs à 9 forts> sont utilisés en interne afin que nous ayons tendance à éviter ces personnes aussi.

C'est ainsi que nous pouvons ouvrir un descripteur de fichier pour effectuer ce qui suit: P>

Lire: h3> xxx pré>

écrire: h3>
exec 3<test.file
while read line <&3; do 
    echo $line; 
done


0 commentaires