Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Programação em C: Variáveis, Entrada/Saída, Controle e Repetição, Notas de estudo de Informática

Este documento contém um tutorial em português sobre os conceitos básicos da linguagem de programação c, abordando assuntos como declaração e atribuição de variáveis, entrada e saída de dados, estruturas de controle (if, else, switch, case) e comandos de repetição (for, while). Além disso, é apresentado um exemplo de programa que solicita a data de nascimento do usuário e confirma as opções escolhidas.

Tipologia: Notas de estudo

2011

Compartilhado em 05/01/2011

samuell-ralph-de-almeida-ramos-11
samuell-ralph-de-almeida-ramos-11 🇧🇷

5

(2)

7 documentos

1 / 52

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34

Pré-visualização parcial do texto

Baixe Programação em C: Variáveis, Entrada/Saída, Controle e Repetição e outras Notas de estudo em PDF para Informática, somente na Docsity!

e ditorial

índice

3 notícias

4 te m a de capa

10 a program ar

26 s e gurança

28 e le ctrónica

33 te cnologias

38 tutorial

44 gnu/linux

47 e ve ntos

49 anális e s

50 inte rne t

51 blue s cre e n

52 com unidade

e q u ipa PR O G R A M A R

adm inis tração Rui M aia D avid Pintas s ilgo

coorde nador S érgio S antos

coorde nador adjunto M igue lPais

e ditor Joe lRam os

re dacção D anie lCorre ia Rui G onçalve s Pe dro Te ixe ira Bruno Vaz João Pe re ira R icardo Roch a G uilh e rm e Rodrigue s Nuno Corre ia M igue lW ah non Ce ls o Ram os Fe rnando M artins

colaboradore s Jos é O live ira

contacto re vis taprogram ar @ portugal-a-program ar.org

w e bs ite w w w .re vis ta-program ar.info

Criar, Agir e Apre s e ntar

Nos vários e ve ntos por onde te nh o pas s ado, um te m a te m s ido re corre nte : a inovação e m Portugalou, com o alguns indicaram , a falta de la. O e xe m plo m ais apre s e ntado e ra no de s e nvolvim e nto de aplicaçõe s w e b, um a áre a q ue actualm e nte e s tá e m franco de s e nvolvim e nto. Todos os dias s urge m novas e originais aplicaçõe s , m as ainda é raro e ncontrar um a e q uipa portugue s a e nvolvida. Foram apre s e ntadas várias e xplicaçõe s para e s ta gre ve de criação: a localização (cada ve z m e nos im portante ), a m e ntalidade , a falta de inve s tim e nto e , principalm e nte , a falta de corage m. Cada ve z m ais s e pe ns a duas ve ze s ante s de s e atirar de cabe ça nalgum proje cto arris cado. No e ntanto, o m e lh or cam inh o apre s e ntado para o s uce s s o foi m e s m o "te ntar"(m uitas ve ze s ), de dicar-s e a um proje cto e faze r tudo para q ue vingue. Fica aq ui o ince ntivo a todos os portugue s e s q ue e s tive re m a le r, s e m e s m o com toda a de dicação não obtive re m re s ultados (o q ue pode rá aconte ce r m uitas ve ze s ), apre ndam com a e xpe riência e avance m para novas ide ias. M as te nte m ...

A partir de s ta e dição ire m os te ntar acom panh ar m ais e ve ntos q ue aconte çam por Portugal, no s e ntido de divulgar o q ue s e vai faze ndo pe lo nos s o país e prom ove r a dis cus s ão nos m e s m os. Por is s o, pe dim os q ue nos notifiq ue m de futuros e ve ntos , para pode rm os divulgar na re vis ta, de ntro do pe ríodo pos s íve l. Tam bém pode rão e nviar-nos re s um os e fotos de e ve ntos já de corridos para s urgire m na nova s e cção Eve ntos , inaugurada com o e ve nto Te cnonov 2007, no q uale s tive pre s e nte.^ Sérgio Sant

os

te m a de capa

A te cnologia W AP foi criada pe lo Fórum W AP, fundado e m 19 9 7 por m arcas com o a Nok ia ou a M otorola, com o obje ctivo de criar um protocolo de troca de inform ação e m dis pos itivos m óve is (w ire le s s ) com o os te le m óve is. O W AP cons is te num a linguage m de troca de inform ação própria de nom inada W M L. O W M Lé com patíve lcom os s tandards de TCP/IP, H TM L e XM L e inclui tam bém um a linguage m de s cripting s e m e lh ante ao Javas cript, m as m ais le ve de form a a s e r de rápida e xe cução por parte dos dis pos itivos m óve is , já q ue e s te s não pos s ue m grande pode r de proce s s am e nto, de nom inada W M LScript.

A s igla W AP s ignifica W ire le s s Application Protocol, ou s e ja, Protocolo para Aplicaçõe s W ire le s s e é de finida com o um a aplicação XM L1.0.

O s brow s e rs q ue cons e gue m inte rpre tar e s ta linguage m s ão e s pe cíficos , ou s e ja, não pode us ar o s e u brow s e r h abitual(a não s e r q ue pos s ua algum plugin para o e fe ito) para ve r páginas W AP. O s tipos de brow s e r com patíve is com o W AP s ão de nom inados M icro Brow s e rs , pe las s uas caracte rís ticas óbvias – não pode m te r grande s ne ce s s idade s ao níve l do h ardw are , m ais e s pe cificam e nte ao níve lda m e m ória e CPU, e por is s o s ão ide ais para s e r us ados nos dis pos itivos m óve is.

O W M L, com o foi e xplicado ante riorm e nte , é um a linguage m q ue a bas tante s program adore s pare ce rá fam iliar por s e r um m is to de H TM L e XM L, m as m ais rígida e m te rm os de inte rpre tação.

As páginas e m W M L não s ão de m uito dife re nte program ação das páginas e m H TM L, por is s o o program ador com e xpe riência e m H TM L pode facilm e nte iniciar-s e ne s ta linguage m. Es tas páginas têm a e xte ns ão .w m le s ão s e ns íve is a m aiús culas por te re m por bas e o XM L, ou s e ja, s e e s cre ve r não vai te r o m e s m o re s ultado do q ue s e e s cre ve s s e . Por s tandard do XM L, as tags de ve m s e m pre s e r apre s e ntadas e m m inús culas e de ve m s e r s e m pre fe ch adas.

No W AP e xis te m te rm os e s pe cíficos para as páginas e o s e u conjunto, e cos tum a faze r-s e a analogia e ntre o W AP e um jogo de cartas. Im agine q ue te m um a torre de cartas , de nom inado por D e ck , e cada e le m e nto de s s a torre é, obviam e nte , um a carta – de nom inada por Card no código. O ra as s im s e ndo, um a página W M L é cons ide rado um de ck e de ntro da página W M L pode m e xis tir m últiplas cards. Q uando um utilizador ace de à página W M L s ão de s carre gadas todas as cards do de ck , s e ndo q ue a nave gação e ntre e las e s tará a cargo do dis pos itivo q ue as re q ue re u, q ue ne s s a altura não e s tará e m contacto com o s e rvidor.

Introdução ao W M L(W AP)

te m a de capa

O le itor ne s te m om e nto pode e s tar um pouco confus o e m re lação alguns tópicos m e nos e xplorados e por is s o é pre fe ríve lq ue obs e rve um e xe m plo de um de ck , para m e lh or cons olidar os conh e cim e ntos até agora adq uiridos :

**

**

Isto é uma card.
Várias tags HTML funcionam aqui e serão abordadas mais à frente nesta introdução ao WML.

**

Segunda carta do deck

**

Re s ultado:

Explicação do Código:

- Tag q ue de lim ita o de ck. Tag q ue de lim ita cada card. Pode m te r vários atributos , os apre s e ntados s ão: id – Ide ntificação da carta, de ve s e r um nom e único no de ck. title – Título da card, nos te rm inais W APcos tum a s e r apre s e ntado no topo do e crã.

- Parágrafo, idêntico ao H TM L. - Q ue bra de linh a, s e m e lh ante ao H TM L.

Várias tags H TM Lpode m s e r utilizadas da m e s m a form a e m W M L. Aq ui fica um a pe q ue na lis ta das m e s m as :

- Parágrafo - Q ue bra de linh a - Te xto G rande - Te xto Pe q ue no - Bold - Itálico - Sublinh ado (Unde rline )

te m a de capa

(im age m e ncu rtada de vido ao tam anh o do e crã do s im u lador)

**

**

**

**

**

**

**

Nome:
Idade:
Sexo:

**

**

**

**

**

te m a de capa

**

**

**

Titulo:
Premio:

**

Em W M L, para a nave gação e ntre as dive rs as páginas e afins , te m os os s e guinte s e le m e ntos :

G o:

Ir para Carta

Pre vious :

Anterior

Re fre s h :

Actualizar

C om andos W M L

G o

D irig e para a pág ina indicada no h re f.

Ir para abc

Nota: Es te s im ulador não re produz o fie lds e t da m e lh or form a.

Pre vious

D irige para a página vis itada ante riorm e nte.

Página Anterior

Re fre s h

Actualiza a página ao clicar, e tam bém actualiza as variáve is dadas.

Actualizar a página

No O pe ration (noop) Pre vine um a acção de s e r re alizada.

Ir para abc

a program ar

Introdução

D urante os últim os anos as s is tim os a um a grande divulgação da program ação orie ntada aos obje ctos (PO O ). Es ta ve io re s ponde r a re q uis itos e s s e nciais no de s e nvolvim e nto de s oftw are , nom e adam e nte no q ue diz re s pe ito às facilidade s de m anute nção e re utilização do código. M as ape s ar de todas e s tas e voluçõe s , ne m tudo aq uilo q ue a PO O s e propunh a cons e guir foi alcançado. É ne s te conte xto q ue s urge a program ação orie ntada aos as pe ctos (PO A). Es te novo paradigm a de program ação s urgiu e m 19 9 6 por G re ge r K iczalos e pe la s ua e q uipa no Xe rox PARC, q ue tam bém foram re s pons áve is pe lo de s e nvolvim e nto do As pe ctJ, a linguage m PO A m ais us ada.

Q uando vam os de s e nvolve r um a aplicação, é conve nie nte dividir o proble m a q ue nos foi propos to e m parte s. A s e paração do proble m a de acordo com os dados e as funcionalidade s a e le s as s ociadas facilita o e s tudo dos re q uis itos da aplicação. Is to é o q ue s e de s igna por s e paração de inte re s s e s. O paradigm a O O e s tabe le ce um a s e paração de inte re s s e s te ndo e m conta os tipos de dados , re pre s e ntados pe los obje ctos , e as funçõe s q ue utilizam cada tipo de dados , ou s e ja, os m étodos a q ue um obje cto re s ponde.

Program ação

O rie ntada aos

As pe ctos com

As pe ctJ

M as , com o já foi re fe rido ante riorm e nte , ape s ar da orie ntação aos obje ctos te r trazido m e lh orias na form a de program ar, não cons e guiu re s olve r alguns proble m as. Exe m plos clás s icos s ão o re gis tos das ope raçõe s e m fich e iros de log q ue e ncontram os e m m uitos s oftw are s , ou program ação concorre nte /dis tribuída. O código as s ociado a e s te tipo de funcionalidade s e ncontra-s e norm alm e nte e s palh ado por todos os m ódulos , o q ue dificulta a m anute nção e a e volução do código. Em PO A dize m os q ue is to s ão inte re s s e s e ntre cortante s , pois cortam trans ve rs alm e nte todos os m ódulos. A PO A ve m re s olve r e s te proble m a introduzindo um novo níve lde s e paração de inte re s s e s , os as pe ctos.

Bas icam e nte e s te s inte re s s e s trans ve rs ais à aplicação s ão e ncaps ulados ne s tas novas unidade s m odulare s e pos te riorm e nte fundidas com as clas s e s num único s is te m a. Is to não s ó aum e nta a facilidade de m anute nção de s tas funcionalidade s da aplicação, vis to q ue tudo s e e ncontra num único local, com o aum e nta as pos s ibilidade s de re utilização das clas s e s noutros conte xtos , pois e s tas e ncontram -s e lim pas de s tas funcionalidade s q ue norm alm e nte variam m uito de cas o para cas o.

a program ar

  • w ith in - join points q ue ocorre m de ntro de de te rm inadas clas s e s ;
  • targe t- e nvio de m e ns age ns a um obje cto de um de te rm inado tipo;
  • args - e nvio de m e ns age ns e m q ue os argum e ntos s ão de um de te rm inado tipo.

A e xpre s s ão pode s e r um a palavra (nom e de um a clas s e , nom e de um m étodo, e tc.), m as tam bém te m os caracte re s e s pe ciais :

  • *- re pre s e nta um a s e q uência de caracte re s q ualq ue r, de s de q ue não conte nh a pontos ;
  • .. - re pre s e nta um a s e q uência de caracte re s q ualq ue r, m e s m o conte ndo pontos ;
      • re pre s e nta as s ubclas s e s de um a dada clas s e.

Ve jam os agora alguns e xe m plos :

  • pointcu ttos tr() : e xe cu tion(String toString());

Re pre s e nta todas as e xe cuçõe s do m étodo toString. Pode m os re s tringir ape nas à e xe cução do m étodo a obje ctos da clas s e Xpto s ubs tituindo String toString() por String Xpto.toString(), ou a obje ctos da clas s e Xpto e todas as s uas s ubclas s e s faze ndo String Xpto+ .toString();

  • pointcu ts e ts () : call(Xpto.s e t*(..));

Re pre s e nta a ch am ada de m étodos com e çados pe la palavra s e t de clas s e s com e çadas pe la palavra Xpto, com um núm e ro q ualq ue r de argum e ntos. Pode m os lim itar ape nas a m étodos q ue re ce bam argum e ntos de um de te rm inada tipo, por e xe m plo, faze ndo * Xpto.s e t(int,String) lim itaríam os ape nas aos m étodos cujo o prim e iro argum e nto fos s e um inte iro e o s e gundo um a s tring (para além de ve rificar todas as outras condiçõe s já indicadas ).

  • pointcu tge ts () : ge t(private String abc*);

Re pre s e nta todos os ace s s os (para cons ulta) a atributos private do tipo String, com e çados por abc.

O As pe ctJ

O As pe ctJ (h ttp://w w w .e clips e .org/as pe ctj) foi a prim e ira linguage m O A de s e nvolvida e é, provave lm e nte , a m ais us ada. Es ta linguage m pe rm ite acre s ce ntar as pe ctos a program as fe itos e m Java. Para com pre e nde r o As pe ctJ é ne ce s s ário conh e ce r três conce itos fundam e ntais pre s e nte s na PO A :

  • advice s - s ão fragm e ntos de código com as acçõe s re fe re nte s aos inte re s s e s e ntre cortante s ;
  • join points - s ão locais de um program a onde os advice s s e rão e xe cutados , q ue pode m s e r a ch am ada/e xe cução de um m étodo, o ace s s o a m e m bros de um a clas s e , a criação de um obje cto, o lançam e nto de e xce pçõe s , e tc.;
  • pointcuts - s ão um conjunto de join points , de finidos s e gundo um de te rm inado critério, q ue ide ntificam os locais onde um de te rm inado advice s e rá e xe cutado.

Pointcuts

G e ne ricam e nte , a de finição de um pointcutobe de ce à s e guinte s intaxe :

pointcut () : (<padrão>);

O nde :

  • é o ide ntificador de s te pointcut
  • indica a q ue tipo de join point nos re fe rim os (ch am ada de um a função, ace s s o a um atributo, e tc.);
  • <padrão> é um a e xpre s s ão q ue re s tringe os join points a s e re m cons ide rados àq ue le s q ue faze m m atch ing com e s ta e xpre s s ão.

D e s e guida indicam -s e os tipos de join points m ais im portante s :

  • call- ch am ada de um a função;
  • e xe cution - e xe cução de um a função;
  • ge t- cons ulta dos atributos de um obje cto;
  • s e t- alte ração dos atributos de um obje cto;

a program ar

O prim e iro proble m a q ue vam os re s olve r cons is te e m alte rar os m étodos toString(). Vam os alte rá- los de form a a q ue pas s e m a criar um a s tring q ue conte nh a tam bém o nom e da clas s e. Tal pode s e r cons e guido do s e guinte m odo:

pointcut tostr(Object obj) : execution(String toString()) && target(obj);

String around(Object o) : tostr(o) { String s = proceed(o); return ("<" + o.getClass().getName() + " @ " + s + ">"); }

Prim e iro de finim os o pointcut q ue , para além de re s tringir os m étodos à e xe cução do toString(), tam bém capta o obje cto ao q ualo m étodo é e nviado através do targe t. D e s ta form a foi pos s íve lutilizar o obje cto no advice , com o s e pode ve r nas linh as 5 e 6. Foi tam bém us ado proce e d, q ue e xe cuta o m étodo original. D e pois é s ó acre s ce ntar o nom e da clas s e e de volve r o re s ultado.

No próxim o e xe m plo vam os ve r com o us ar o args , q ue é s e m e lh ante ao targe t, m as e s te capta os argum e ntos do m étodo (ou cons trutor, com o s e rá o cas o). Es te as pe cto irá im prim ir um a m e ns age m s e m pre q ue um obje cto de um a clas s e com e çada por Clas s e for inicializado através de um cons trutor q ue re ce ba um argum e nto do tipo inte iro.

pointcut init(int x) : initialization(new(..)) && within(Classe) && args(x);*

after(int x) : init(x) { System.out.println("Classe: " + thisJoinPointStaticPart.getSignature().getDeclaringType().getName()); System.out.println("Argumentos: " + x); }

Ne s te e xe m plo foi tam bém us ada a variáve lth is JoinPointStaticPart, q ue contém um a s érie de inform açõe s s obre o join point e m q ue o as pe cto vai s e r e xe cutado. Exis te tam bém a variáve l th is JoinPoint, q ue pode ria s e r us ada ne s te cas o para s abe r q uais os argum e ntos re ce bidos. Tals e rá fe ito no próxim o e xe m plo.

Suponh am os agora q ue q ue ríam os re gis tar todas as alte raçõe s re alizadas e m q ualq ue r um a das clas s e s. Para alte rar o valor dos atributos é ne ce s s ário re corre r aos m étodos s e t*. Logo vam os criar um pointcut q ue agrupe todas as e xe cuçõe s de s te s m étodos. Tam bém vam os q ue re r re gis tar q ualo obje cto afe ctado, q uais os argum e ntos us ados no m étodo (s e ndo q ue o s e u tipo ne m s e m pre é o m e s m o) e q ualo nom e do m étodo.

pointcut sets(Object obj) : call( Classe.set(..)) && target(obj);*

before(Object obj) : sets(obj) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("history.txt",true));

a program ar

Rui G onçal

v e s

**Date d=(Calendar.getInstance()).getTime(); bw.write("Data: " + d + "\nObjecto: " + obj + "\nMetodo: "

  • thisJoinPointStaticPart.getSignature().getName()
  • "\nArgumentos:\n"); Object[] args = thisJoinPoint.getArgs(); String[] ids = ((CodeSignature)thisJoinPoint.getSignature()) .getParameterNames(); for (int i = 0; i < args.length; i++) { bw.write(" " + ids[i] + "=" + args[i] + "\n"); } bw.close(); } catch(Exception e){System.out.println(e);} }**

Aq ui já re corre m os à variáve lth is JoinPoint para obte r os argum e ntos us ados no m étodo, as s im com o os ide ntificadore s dos argum e ntos. O re s ultado obtido s e rá algo com o:

D ata: SatD e c 09 17:56:30 W ET 2006 O bje cto: <Clas s e 1 @ x=12 /a=true > M e todo: s e tX Argum e ntos : x=

Conclus ão

Ao longo de s te artigo ficaram vis íve is alguns dos be ne fícios q ue pode m os obte r com a PO A. Contudo h á alguns factos q ue é ne ce s s ário re alçar. Em prim e iro, q ue um a abordage m dos proble m as s e gundo e s ta m e todologia, é bas tante m ais com plicada do q ue a abordage m O O. É difícilde finir a e s trutura do s oftw are , ide ntificando corre ctam e nte todas as parte s q ue o com põe m. M e s m o de pois de de finida a e s trutura, com e te m os facilm e nte e rros na de finição dos as pe ctos (aconte ce várias ve ze s de finir as pe ctos q ue originam ciclos infinitos , pois ao e xe cutá-los criávam os s ituaçõe s onde outros as pe ctos pode riam s e r e xe cutados ), q ue por ve ze s não s ão m uito vis íve is. Sublinh a-s e ainda q ue não é obje ctivo da PO A s ubs tituir a PO O , tratam -s e s im de dois paradigm as com ple m e ntare s.

Por últim o re fe ria-s e q ue e s te te xto é ape nas um a introdução à PO A/As pe ctJ e , com o tal, m uitas das capacidade s de s te novo paradigm a não foram aq ui de m ons tradas. Suge re -s e a q ue m q uis e r aprofundar os s e us conh e cim e ntos ne s ta áre a, a cons ulta da página w e b do As pe ctJ, onde pode rá e ncontrar um a vas ta docum e ntação s obre e s te te m a.

Re fe rências

h ttp://w w w .e clips e .org/as pe ctj h ttp://e n.w ik ipe dia.org/w ik i/As pe ct-orie nte d_program m ing h ttp://w w w .re s e arch .ibm .com /h ype rs pace h ttp://w w w .de vx.com /Java/Article / 28422

a program ar

Agora vam os ve r pas s o a pas s o as funçõe s utilizadas :

Clie nte

1 - Conjunto de bibliote cas a adicionar

às tradicionais :

#include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <unistd.h>

2 - D e finir a e s trutura de de s tino

(s e rvidor) e as variáve is :

// definição da estrutura do servidor struct sockaddr_in target; // criar o socket, indicando a família // a que pertence (AF_INET), o tipo de // protocolo (neste caso TCP - // SOCK_STREAM) e o parâmetro do // protocolo (0). int sock = socket(AF_INET,SOCK_STREAM,0); // variáveis char palavra[50], palavra2[50]; // tamanho da estrutura do servidor int ad1 = sizeof(target);

3 - Inicializar a e s trutura:

*// inicializa a estrutura do servidor bzero((char )&target, ad1);

4 - D e finir as proprie dade s do s e rvidor

ao q ualnos vam os ligar:

// indica a família do protocolo target.sin_family = AF_INET; // especifica o endereço (IP) do // servidor target.sin_addr.s_addr = inet_addr("127.0.0.1"); // porta que o programa vai usar target.sin_port = htons(8450);

5 - Es tabe le ce r a ligação ao s e rvidor:

*// efectua a ligação ao servidor. // Se falhar (por exemplo o servidor // estar em baixo) o programa termina if(connect(sock, (struct sockaddr )&target, ad1) == -1) { close(sock); puts("Conexao falhou!"); exit(0); }

6 - Lê um a palavra do te clado

e nq uanto e s ta for dife re nte de “e xit”.

Em s e guida e nvia-a para o s e rvidor e

re ce be -a com le tras m aiús culas :

do { scanf("%s", palavra); // envia para o servidor os dados // contidos na variável “palavra” write(sock, palavra, 50); if(strcmp(palavra, "exit") != 0){ // recebe do servidor os dados // e guarda-os na variável // “palavra2” read(sock, palavra2, 50); printf("%s\n", palavra2); } }while(strcmp(palavra, "exit") != 0);

7 - Fe ch ar o s ock e t:

close(sock);

Se rvidor

1 - Conjunto de bibliote cas a adicionar

às tradicionais :

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <ctype.h>

a program ar

2 - D e finir a e s trutura do clie nte , do

s e rvidor e as variáve is :

// definição das estruturas do // cliente e do servidor struct sockaddr_in me, from; // criação dos sockets.o “sock” é // declarado identicamente ao cliente int newSock, sock = socket(AF_INET,SOCK_STREAM,0); // declaração das variáveis int tam = 0, i = 0; int ad1 = sizeof(me); char palavra[50], palavra2[50];

3 - Inicializar a e s trutura:

*// inicializa a estrutura do servidor bzero((char )&me, ad1);

4 - D e finir as proprie dade s do s e rvidor:

// indica a família do protocolo me.sin_family = AF_INET; // fica associado a todos os // endereços IP do host local me.sin_addr.s_addr = htonl(INADDR_ANY); // porta em que o servidor vai // estar à escuta me.sin_port = htons(8450);

5 - Alocar a porta. Se e s tive r ocupada é

fe ch ado o s e rvidor.

*// se a porta estiver ocupada o servidor não pode correr e é terminado if(bind(sock, (struct sockaddr )&me, ad1) == -1) { close(sock); puts("Porta Ocupada!"); exit(0); }

6 - Es pe rar por pe didos. É criado um

novo s ock e tpara tratar ape nas de s te

pe dido e nq uanto q ue o outro s ock e t

continua à e s pe ra de pe didos :

**// coloca o socket à escuta. // Podem ser mantidos em espera 5 // pedidos de ligação listen(sock, 5); // gera um novo socket específico // para essa ligação newSock = accept(sock, (struct sockaddr )&from, (void )&ad1); // fechar o socket antigo close(sock);

7 - Ciclo infinito q ue trata dos pe didos

do clie nte :

for(;;){ // recebe os dados do cliente e guarda-os na variável “palavra” read(newSock, palavra, 50); if(strcmp(palavra, "exit") != 0){ tam = strlen(palavra); for(i=0;i<tam;i++){ if((palavra[i]>='a') && (palavra[i]<='z')){ palavra2[i] = toupper(palavra[i]); } } palavra2[i] = '\0'; // envia os dados que estão na variável “palavra2” para o cliente write(newSock, palavra2, 50); } else{ close(newSock); exit(0); } }

a program ar

Clie nte

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <unistd.h>

int main() { struct sockaddr_in target; int sock = socket(AF_INET, SOCK_STREAM, 0); char palavra[50], palavra2[50]; int ad1 = sizeof(target);

*bzero((char )&target, ad1);

target.sin_family = AF_INET; target.sin_addr.s_addr = inet_addr("127.0.0.1"); target.sin_port = htons(8450);

*if(connect(sock, (struct sockaddr )&target, ad1) == -1) { close(sock); puts("Conexao falhada!"); exit(0); }

do { scanf("%s", palavra); write(sock, palavra, 50); if(strcmp(palavra, "exit") != 0){ read(sock, palavra2, 50); printf("%s\n", palavra2); } }while(strcmp(palavra, "exit") != 0); close(sock); return 0; }

Para conh e ce r m e lh or com o s ão com pos tas algum as e s truturas o le itor pode vis itar os link s : h ttp://jan.ne tcom p.m onas h .e du.au/Clie ntSe rve r/s ock e t/s ock e t.h tm l e h ttp://w w w .de i.is e p.ipp.pt/~ andre /docum e ntos /s ock e ts -be rk e le y.h tm l

Se não pode tam bém pe s q uis ar na Inte rne t já q ue e xis te inúm e ra inform ação no q ue diz re s pe ito à API s ock e ts de Be rk e le y.

P e dro T

e ixe ira

a program ar

Es tatís ticas e m PH P

1ª Parte

Q ue m já criou um w e bs ite ce rtam e nte te ve a curios idade de s abe r q uantas pe s s oas por lá pas s aram e de onde s e riam e s s as pe s s oas. A curios idade h um ana é natural e le va a e s tas q ue s tõe s. Es ta é a prim e ira parte dum tutorialq ue s e rá concluído na próxim a e dição.

Para re s olve r de um a form a s im ple s e inte iram e nte ao nos s o gos to irá s e r de s e nvolvido aq ui um tutorial “pas s o-a- pas s o” de form a a q ue no finalde s te artigo te nh a um s is te m a de e s tatís ticas s im ple s e funcionalcom as inform açõe s m ais utilizadas. Todas e s tas inform açõe s s e rão m os tradas com auxílio vis ualde gráficos , para q ue os re s ultados s e jam m ais ape lativos aos vis itante s.

Ante s de com e çar a program ar, convém faze r o dow nload de algum as clas s e s e m PH P q ue irá utilizar de form a a m inim izar o s e u trabalh o. São e las :

  • G EO IP É um a clas s e com ve rs ão ope ns ource e ve rs ão lice nciada. Nós ire m os utilizar a ve rs ão livre para nos re tornar o código e nom e do País de orige m do vis itante s. Pode rão re alizar o dow nload e m : h ttp://w w w .m axm ind.com /app/ge oip_country
    • M aani PH P/SW FCh arts É um a fe rram e nta livre q ue nos pe rm ite criar gráficos e m Sh ock w ave Flas h e m te m po re al com dados e s táticos ou dinâm icos. Encontram o dow nload e inform ação m ais com ple ta e m : h ttp://w w w .m aani.us /ch arts /inde x.ph p

D e vido à e xte ns ão do s cript, ne s te artigo ape nas ire i falar das funçõe s m ais re le vante s. O s cript na s ua totalidade , im ple m e nta 4 gráficos ( 2 de barras , e 2 circulare s ), e 4 tabe las re s um o. No e ntanto ape nas ire m os falar aq ui da cons trução de um gráfico e de um a tabe la re s um o. Na conclus ão do artigo (na próxim a e dição) s e rá re fe rido um link para o s criptcom ple to.

Ins talação

Após te r fe ito o dow nload de am bas as fe rram e ntas (G e oIP e M aani Ch arts ), de ve rá de s com pactá-las para a raiz do s e u w e bs ite. O s fich e iros de s critos nas próxim as páginas de ve rão tam bém s e r guardados na raiz do w e bs ite.

SQ L

Com o o proje cto irá s alvaguardar os dados de todos os vis itante s q ue pas s am no w e bs ite , de ve rá guardar os re s pe ctivos dados num a bas e de dados e m M y SQ L.