Um tubo é um tubo longo que contém muitos dados. Se a extremidade receptora do tubo parar de puxar os dados, ele começará a fazer backup e o tubo explodirá. O computador informa o fim da inserção dos dados no pipe que isso aconteceu.
omniforme
Respostas:
7
Um canal é simplesmente um mecanismo de comunicação entre processos (IPC) usado para conectar a saída padrão de um processo à entrada padrão de outro.
Um exemplo é quando você deseja procurar um arquivo pela palavra "pax":
cat filename | grep pax
e sim, eu sei que você pode grepo arquivo diretamente, mas isso não explica como funciona, não é?
Isso conecta a saída padrão do catcomando à entrada padrão do grepcomando. catenvia o conteúdo do arquivo para sua saída padrão e greplê seu arquivo (neste caso) a partir de sua entrada padrão. Ao conectar processos como esse, você pode criar suas próprias ferramentas, consistindo em qualquer número de segmentos de tubos. Coisas como:
Um tubo quebrado é aquele em que (geralmente) o receptor dos dados fechou a conexão enquanto o remetente ainda está tentando enviar coisas.
Por exemplo, se você enviar um arquivo grande por meio de um programa de pager (para visualizá-lo uma página por vez):
cat myfile | pager
e faça a CTRL-BREAK, isso pode fazer com que o pagerprocesso desligue seu tubo de entrada antes de catterminar de usá-lo. Essa é uma possibilidade para obter este tubo quebrado.
Em uma pesquisa superficial do Google , esse problema específico parece estar relacionado a implantações ad hoc e as soluções fornecidas geralmente incluem sair da maior parte do seu software e reiniciar a maioria dos seus dispositivos.
Provavelmente, isso é sério o suficiente para relatar o problema à Apple. Quanto mais desenvolvedores reclamarem disso, maior será a probabilidade de algo ser feito para corrigi-lo.
pr -e4 -n ten-thousand-lines.c | sed 10qacaba com um cano quebrado. Se princomoda dizer que recebeu o sinal SIGPIPE é outra questão; pode muito bem sair como resultado do sinal (gerando um status de saída diferente de zero).
precisa
Os tubos não conectam necessariamente a entrada e saída "padrão". É possível passar programaticamente qualquer E / S através de um canal, embora na linha de comando você esteja correto.
CarlF
2
O |personagem costuma ser chamado de pipe. Nos vários shells do UNIX (que eu conheço), ele pode ser usado para canalizar a saída de um comando para a entrada de outro.
cat myfile.txt | head
O headcomando mostra apenas as primeiras linhas de sua entrada. Nesse ponto, ele fecha sua entrada. Isso representa um problema para o comando que estava gerando a entrada. Para onde ele escreve? Sempre que temos essa situação ou quando o processo de escrita termina antes que o leitor termine, isso é chamado de "cano quebrado".
Para impedir que o catcomando permaneça para sempre, o padrão UNIX define um sinal especial ( SIGPIPE , sinal 13 ) ao qual ele é enviado cat. A ação padrão para esse sinal é interromper o processo, o que faz com que o catfinal seja agradável.
Parece que o aplicativo que você está usando instalou um manipulador de sinal para todos os sinais, incluindo o SIGPIPE, que cria a pequena mensagem pop-up que você vê.
Um canal é um mecanismo IPC em sistemas Unix. Um tubo possui duas extremidades, uma extremidade de leitura e uma extremidade de gravação. Os dados gravados no final da gravação podem ser lidos a partir do final da leitura e saem na ordem em que foram gravados.
No mundo da linha de comando do Unix, os pipes são uma maneira muito comum de conectar programas para realizar um trabalho. Por exemplo sed 's/foo/bar/g' fred.txt | grep -e 'bar.*baz', o arquivo será lido, fred.txtsubstituindo todas as instâncias da sequência foopela sequência e, em barseguida, procure o resultado por linhas que contenham barseguidas por algum número de caracteres baz.
Isso, é claro, não parece muito útil. Mas tenho certeza de que, se você pensar sobre isso, poderá ver como pode colocar isso em todos os tipos de usos interessantes, especialmente depois de ter programas como awkou perlà sua disposição.
O sistema de tubulação faz parte do Unix desde muito cedo. E se um processo no seu pipeline terminar, você normalmente deseja que todos os programas no pipeline sejam encerrados. Isso significa que, por padrão, um processo que grava em um canal no qual o processo na extremidade de leitura se foi receberá um SIGPIPEsinal. E se o sinal estiver bloqueado, o writeerro ainda ocorrerá com um tipo especial de erro, indicando que o tubo 'quebrou'.
A manipulação padrão de SIGPIPEmata o processo que o recebe. E se não é a "cabeça" do oleoduto, a SIGPIPEcoisa toda se propaga de volta à cadeia.
O que o Xcode está reclamando é que ele iniciou algum subprograma para fazer algo com um cano que o levava, e esse subprograma morreu inesperadamente deixando o cano quebrado.
Um tubo "quebrado" é aquele em que uma extremidade foi close()atingida e a outra está sendo lida ou gravada. Por exemplo, no seguinte comando shell:
cat foo | less
O catprocesso mantém a extremidade de escrita do tubo e o lessprocesso a leitura. Se o processo do leitor fechar o tubo, ele será quebrado (e, portanto, inútil); o processo do gravador receberá o erro de "tubo quebrado" do sistema operacional.
Na verdade, só está "quebrado" se o leitor a fechar. Se o escritor o fechar (como catobviamente acontecerá assim que terminar), o leitor verá apenas um final de arquivo normal.
Random832
Opa, você está absolutamente correto ... Vou atualizar minha resposta.
Respostas:
Um canal é simplesmente um mecanismo de comunicação entre processos (IPC) usado para conectar a saída padrão de um processo à entrada padrão de outro.
Um exemplo é quando você deseja procurar um arquivo pela palavra "pax":
e sim, eu sei que você pode
grep
o arquivo diretamente, mas isso não explica como funciona, não é?Isso conecta a saída padrão do
cat
comando à entrada padrão dogrep
comando.cat
envia o conteúdo do arquivo para sua saída padrão egrep
lê seu arquivo (neste caso) a partir de sua entrada padrão. Ao conectar processos como esse, você pode criar suas próprias ferramentas, consistindo em qualquer número de segmentos de tubos. Coisas como:Um tubo quebrado é aquele em que (geralmente) o receptor dos dados fechou a conexão enquanto o remetente ainda está tentando enviar coisas.
Por exemplo, se você enviar um arquivo grande por meio de um programa de pager (para visualizá-lo uma página por vez):
e faça a CTRL-BREAK, isso pode fazer com que o
pager
processo desligue seu tubo de entrada antes decat
terminar de usá-lo. Essa é uma possibilidade para obter este tubo quebrado.Em uma pesquisa superficial do Google , esse problema específico parece estar relacionado a implantações ad hoc e as soluções fornecidas geralmente incluem sair da maior parte do seu software e reiniciar a maioria dos seus dispositivos.
Provavelmente, isso é sério o suficiente para relatar o problema à Apple. Quanto mais desenvolvedores reclamarem disso, maior será a probabilidade de algo ser feito para corrigi-lo.
fonte
pr -e4 -n ten-thousand-lines.c | sed 10q
acaba com um cano quebrado. Sepr
incomoda dizer que recebeu o sinal SIGPIPE é outra questão; pode muito bem sair como resultado do sinal (gerando um status de saída diferente de zero).O
|
personagem costuma ser chamado de pipe. Nos vários shells do UNIX (que eu conheço), ele pode ser usado para canalizar a saída de um comando para a entrada de outro.O
head
comando mostra apenas as primeiras linhas de sua entrada. Nesse ponto, ele fecha sua entrada. Isso representa um problema para o comando que estava gerando a entrada. Para onde ele escreve? Sempre que temos essa situação ou quando o processo de escrita termina antes que o leitor termine, isso é chamado de "cano quebrado".Para impedir que o
cat
comando permaneça para sempre, o padrão UNIX define um sinal especial ( SIGPIPE , sinal 13 ) ao qual ele é enviadocat
. A ação padrão para esse sinal é interromper o processo, o que faz com que ocat
final seja agradável.Parece que o aplicativo que você está usando instalou um manipulador de sinal para todos os sinais, incluindo o SIGPIPE, que cria a pequena mensagem pop-up que você vê.
fonte
Este erro parece surgir com bastante frequência. /programming/490366/ad-hoc-deployment-issue-putpkt-write-failed-broken-pipe é "... um erro interno na capacidade do Xcode de falar com seu telefone. Isso não acontece significa que você fez algo errado, é um bug no sistema de desenvolvimento "
fonte
Um canal é um mecanismo IPC em sistemas Unix. Um tubo possui duas extremidades, uma extremidade de leitura e uma extremidade de gravação. Os dados gravados no final da gravação podem ser lidos a partir do final da leitura e saem na ordem em que foram gravados.
No mundo da linha de comando do Unix, os pipes são uma maneira muito comum de conectar programas para realizar um trabalho. Por exemplo
sed 's/foo/bar/g' fred.txt | grep -e 'bar.*baz'
, o arquivo será lido,fred.txt
substituindo todas as instâncias da sequênciafoo
pela sequência e, embar
seguida, procure o resultado por linhas que contenhambar
seguidas por algum número de caracteresbaz
.Isso, é claro, não parece muito útil. Mas tenho certeza de que, se você pensar sobre isso, poderá ver como pode colocar isso em todos os tipos de usos interessantes, especialmente depois de ter programas como
awk
ouperl
à sua disposição.O sistema de tubulação faz parte do Unix desde muito cedo. E se um processo no seu pipeline terminar, você normalmente deseja que todos os programas no pipeline sejam encerrados. Isso significa que, por padrão, um processo que grava em um canal no qual o processo na extremidade de leitura se foi receberá um
SIGPIPE
sinal. E se o sinal estiver bloqueado, owrite
erro ainda ocorrerá com um tipo especial de erro, indicando que o tubo 'quebrou'.A manipulação padrão de
SIGPIPE
mata o processo que o recebe. E se não é a "cabeça" do oleoduto, aSIGPIPE
coisa toda se propaga de volta à cadeia.O que o Xcode está reclamando é que ele iniciou algum subprograma para fazer algo com um cano que o levava, e esse subprograma morreu inesperadamente deixando o cano quebrado.
fonte
Um tubo "quebrado" é aquele em que uma extremidade foi
close()
atingida e a outra está sendo lida ou gravada. Por exemplo, no seguinte comando shell:O
cat
processo mantém a extremidade de escrita do tubo e oless
processo a leitura. Se o processo do leitor fechar o tubo, ele será quebrado (e, portanto, inútil); o processo do gravador receberá o erro de "tubo quebrado" do sistema operacional.fonte
cat
obviamente acontecerá assim que terminar), o leitor verá apenas um final de arquivo normal.