I know how to do redirecting, but using this technique with command line argument is so confusing. I don't know anything.
Por favor, descreva mais detalhadamente o que exatamente confunde você. Quanto a mim, os resultados são muito esperados: se um objeto de arquivo é aberto para somente leitura (como faz o redirecionamento '<'), o F_GETFL fornecerá O_RDONLY. O mesmo para outros tipos de redirecionamentos.
Sem redirecionamento, um comando filho recebe os mesmos descritores padrão que o pai deve ter. Em um caso interativo típico, é o terminal do usuário e todos os descritores estão em leitura-gravação. Decidiu-se inútil torná-los somente leitura, somente gravação, etc., porque é mais conveniente usar o mesmo descritor para atividade de terminal interativo (como, por exemplo, atividade de tela cheia com curses
), do que dividi-lo entre 0 para terminal entrada, 1 para saída de terminal, etc .; mas isso não é estendido para redirecionamentos especificados pelo usuário. Foi isso que você perguntou?
And, what's the difference between &2 ,&1 and 2, 1 when we use redirecting?
Se você quer dizer formulários como 2>1
e 2>&1
, eles são principalmente diferentes. 2>1
redireciona 2 como gravando no arquivo 1
. 2>&1
redireciona 2 como cópia do descritor 1 (no nível C, isso é dup2(1,2)
). Tanto n<&m
como n>&m
para o numérico n, m são idênticos e não adicionam restrições ao modo de acesso.