<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>O bar no fim do universo &#187; posix opnião</title>
	<atom:link href="http://piero.contezini.net/tag/posix-opniao/feed/" rel="self" type="application/rss+xml" />
	<link>http://piero.contezini.net</link>
	<description></description>
	<lastBuildDate>Sat, 14 Jan 2012 19:06:07 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Conservadorismo do padrão POSIX</title>
		<link>http://piero.contezini.net/2008/07/23/conservadorismo-do-padrao-posix/</link>
		<comments>http://piero.contezini.net/2008/07/23/conservadorismo-do-padrao-posix/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 19:04:28 +0000</pubDate>
		<dc:creator>piero</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[discussão]]></category>
		<category><![CDATA[posix opnião]]></category>

		<guid isPermaLink="false">http://piero.contezini.net/?p=18</guid>
		<description><![CDATA[O padrão POSIX foi criado na decada de 80 para permitir a portabilidade entre plataformas UNIX, anos mais tarde o Linux também aderiu ao padrão, assim como uma port chamada CYGWIN também habilitou os sistemas Windows a rodarem estas aplicações. Além de uma interface de usuário (o shell, Korn Shell no caso), se é que [...]]]></description>
			<content:encoded><![CDATA[<p>O padrão POSIX foi criado na decada de 80 para permitir a portabilidade entre plataformas UNIX, anos mais tarde o Linux também aderiu ao padrão, assim como uma port chamada CYGWIN também habilitou os sistemas Windows a rodarem estas aplicações.</p>
<p>Além de uma interface de usuário (o shell, Korn Shell no caso), se é que ainda podemos chamar assim. Também foi criada uma interface de acesso aos serviços do Sistema Operacional, chamadas de SYSCALLS.</p>
<p>A verdade é que fazem quase 25 anos que estes padrões estão inalterados, e nos dias de hoje é simplesmente impossível entender por que ainda seguimos esta norma, abaixo segue um exemplo de como esta desatualizada a API de programação:</p>
<blockquote><p>struct ifreq *ifr;<br />
struct ifreq ifrr;<br />
struct sockaddr_in sa;</p>
<p>ifr = &amp;ifrr;</p>
<p>ifrr.ifr_addr.sa_family = AF_INET;</p>
<p>strncpy(ifrr.ifr_name, ifname, sizeof(ifrr.ifr_name));</p>
<p>&#8230;..</p>
<p>*ifaddr = ifrr.ifr_addr;<br />
printf(&#8220;Address for %s: %s\n&#8221;, ifname, inet_ntoa(inaddrr(ifr_addr.sa_data)));</p></blockquote>
<p>O código acima serve para mostrar os IP&#8217;s das interfaces de rede presentes na maquina, ele é tão antigo que no tempo em que o POSIX foi criado, as máquinas dificilmente tinham varias interfaces de rede, então para facilitar ao programador localizar o IP da máquina, foi criada uma macro chamada <em>ifr_addr.sa_data</em>, mas o que acontece quando queremos saber o endereço de outras interfaces? A maneira mais simples é fazer isto:</p>
<p>Copiar o nome da interface para a estrutura ifrr, chamar novamente o ioctl() pertinente, e pegar o campo .sa_data, mas o que acontece se não sabemos o nome da interface? Bem.. dai perdeu playboy. Não existe syscall POSIX para enumerar as interfaces presentes.. O Linux atualmente esta implementando uma função mas não é padrão..</p>
<p>Um método extremamente ultrapassado de se fazer uma operação muito simples.</p>
<p>E assim acontece o mesmo com a maioria das chamadas SYSCALLS do POSIX, outro exemplo é o já citado <em>ioctl()</em>, ele tem tantas funções que simplesmente é impossível uma pessoa saber a metade deles, ele preenche estruturas de tamanho variavel, com informação variavel, sem qualquer explicação do retorno possível a não ser na documentação do proprio sistema operacional.</p>
<p>Tenho conhecimento de dois sistemas operacionais com API&#8217;s atuais, o Windows e o Mac OS X.</p>
<p>No caso do Windows existem tantas SYSCALLS que algumas inclusive fazem exatamente as mesmas coisas, somente para manter a compatibilidade entre as versões interiores, mas a questão é que pelo menos elas lidam com problemas atuais como Orientação a Objeto, Leitura e Escrita multiplexada (ao mesmo tempo sem threads) e muito mais.</p>
<p>Ainda existe o Darwin, que é o verdadeiro sistema operacional do Mac OS X, pois este é muito mais, na verdade é um conjunto de serviços de alto nivel como manipulação de tela, execução de conteudo multimidia, comunicação com hardware e dezenas de outros serviços.</p>
<p>O fato é que este último eu ainda estou estudando para poder dar uma opnião correta, mas o meu ponto neste artigo é que, pelo menos estes dois sistemas operacionais tentam atender as necessidades dos desenvolvedores, ao contrario do POSIX que tenta manter compatibilidade e dificulta a criação de aplicações.</p>
<p>Acredito que num futuro breve será necessária a criação de um novo padrão para compatibilidade de sistemas operacionais, e poderemos nos ver livres desta interface velha e obsoleta.</p>
]]></content:encoded>
			<wfw:commentRss>http://piero.contezini.net/2008/07/23/conservadorismo-do-padrao-posix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

