Pergunta

Quais são as diferenças entre tubos em Windows e Linux?

Foi útil?

Solução

Uma diferença que eu saiba, é que pipes nomeados sob Linux são entradas reais no sistema de arquivos (você vai vê-lo em uma listagem de diretório, eles têm um tipo especial), enquanto que no Windows eles são armazenados em algum repositório mágico em algum lugar (todos eles são acessados ??através do caminho "\\. \ pipe \".

Em segundo lugar, no Linux você pode apenas escrever / ler a partir de tubos como se fossem qualquer outro arquivo, usando o arquivo padrão métodos IO. Considerando que, em janelas, você tem que usar as funções 'tubos', que fazem parte da API Win32 especial.

Eu como método de linux melhor, porque me permite usar tubos com qualquer app que eu quero. Por exemplo:

mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi

Isto deixa-me canalizar a saída do decodificador MP3 diretamente para o decodificador de vídeo, em vez de ter que primeiro decodificar todo o MP3 em um arquivo WAV no disco. É útil se você tem um CPU dual-core, porque então você está executando ambas as operações de uma só vez, para um aumento de velocidade agradável.

Outras dicas

No Linux (e ix * em geral), "tudo é um arquivo". Você pode ler / escrever / procuram tubos e tomadas e dispositivos sem restrições, na medida em que essas operações fazem sentido.

Considerando que o Windows tem uma arquitetura muito menos unificado para estes diferentes tipos de objetos. Embora eu não poderia dizer-lhe os detalhes, eu sei que o buffer de tubos é consideravelmente diferente entre Windows e Linux, assim você pode encontrar dificuldades lá.

Além disso, um uso Unix-y comum de tubos é fork() um subprocesso e, em seguida, comunicar com ele através de um tubo (o progenitor é aberta numa extremidade, a criança se abre na outra extremidade). No Windows, esse tipo de coisa simplesmente não é possível. mecanismos de IPC são bastante diferentes.

Veja também o segmento anterior:

O que são nomeados pipes?

Que contém a minha opinião e vários outros povos

Outra diferença importante

Sob janelas

A | B | C 

Até que um é feito com a sua saída B não inicia a leitura, o mesmo para a saída de B ser lido por C

* nix engancha a entrada e saída em conjunto de modo que pode ler C saída de B e B pode ler de saída de A, enquanto A e B estão ainda a executar

O rendimento é aproximadamente o mesmo mas saída mostra-se mais rapidamente com nix *.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top