procura a função no unix

3

Eu tento entender a função seek (2) da versão 6 do Unix.

Este exemplo:

seek(0,0,2)

O primeiro argumento é o descritor de arquivo. E 0 seria a entrada padrão. O segundo argumento é o deslocamento, que é 0. E o terceiro argumento nos diz de acordo com a página man " o ponteiro está configurado para o tamanho do arquivo mais offset. "

Mas por que você faria isso? Por que você apontaria após o arquivo?

A linha é do código-fonte .

    
por Joey 28.12.2014 / 14:24

4 respostas

4

O seek(0, 0, 2) pulará todos os dados que são armazenados em buffer para o descritor de arquivo 0. Assim, após este comando, a próxima leitura desse filedcriptor não lerá nada que tenha sido armazenado em buffer.

Eu acho que se você examinar o código e entender qual é o propósito real, você entenderá que, embora o descritor de arquivo 0 seja normalmente stdin, este programa é realmente útil somente se for parte de um script que é lido através desse descritor de arquivo.

Por exemplo, dê uma olhada no seguinte script:

goto
echo "hello"

O goto sem nenhum argumento acionará a busca.

Sem o seek(0, 0, 2) após a saída do comando goto , o script ainda executaria o comando echo "hello" porque o chamador do comando goto simplesmente lerá o próximo comando do script.

    
por 28.12.2014 / 19:05
1

Você gostaria de retroceder a entrada padrão antes de retornar devido a uma condição de erro.

if (argc<2 || ttyn(0)!='x') {
    write(1, "goto error\n", 11);
    seek(0, 0, 2);
    return;
}
    
por 28.12.2014 / 15:06
1

seek e fseek são usados para alterar a posição atual em um arquivo (descritor de arquivo (busca) ou ponteiro de arquivo (fseek)). Em C, normalmente uso o fseek. Alguns usos típicos de procurar / fseek do final do arquivo (SEEK_END):

Posição no final do arquivo = seek(f,0,2) or fseek(f,0,2)

Calculando o tamanho de um arquivo = fseek(f,0,2); size=ftell(f )

Posição no final do arquivo menos 20 = fseek(f,-20,2)

Alguns "arquivos" não podem ser retrabalhados

    
por 28.12.2014 / 21:07
1

Não é depois do arquivo, pois o deslocamento é 0, então ele aponta para o final do arquivo, normalmente usado para anexar dados a um arquivo.

Isto é feito com stdin para ir além da entrada que foi escrita e não lida, é impreciso referir-se a ela como um buffer, pois se o stdin é um pipe, ele é lido até que nenhuma outra leitura seja possível. br> O comando passwd faz isso para evitar casos em que há entrada que não faz parte da senha em si (como a duplicação de pressionamentos no retorno) e para impedir o script básico da interação com ela.

    
por 28.12.2014 / 14:51

Tags