Programando Software Livre em C

830 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
830
On SlideShare
0
From Embeds
0
Number of Embeds
225
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Programando Software Livre em C

  1. 1. 1
  2. 2. Programando Software Livre em C Fernando Mercês 2
  3. 3. Agenda● Por que o C nunca vai sumir?● A suíte de compiladores GNU● Criando um projeto de exemplo● Distribuindo o software● Mercado 3
  4. 4. Por que o C nunca vai sumir?●Metade do universo é escrito em C (kernel Linux, Windows,httpd, samba, squid, bind, java, python, php, openldap, wine...)● Desempenho: o compilador C gera código de máquina.●Portabilidade: SIM, basta que seu código não dependa debibliotecas não portáveis! E ainda existe Cygwin!●Quem falou que C é velho? A última atualização daespecificação foi em 2011.●O comitê WG14 da ISO/IEC especificou na C11 recursos comomultithreading (thread.h), bound checking em funções comostrcpy() e estruturas anônimas. 4
  5. 5. A suíte de compiladores GNU●GNU Compiler Collection, compila C, C++, Objective-C,Fortran, Java, Ada e Go.● A versão 4.7.1 saiu em 14 de junho deste ano.● Conta com poderosos aliados como gdb e make.●Extensa documentação, cheia de recursos, otimizaçõespara processadores específicos, proteções de código etc.● Mas existem outros livres como CLang, tcc... 5
  6. 6. Brinque com o tcc!$ cat ate3.c#!/usr/bin/tcc -run#include <stdio.h>int main(void){ for (int i=0; i<3; i++) printf("%dn", i); return 0;}$ chmod +x ate3.c$ ./ate3.c ---$ cat << EOF | tcc -run ->main(void) { puts("Diz aê pro tcc!"); }>EOF 6
  7. 7. A suíte de compiladores GNU●GNU Compiler Collection, compila C, C++, Objective-C,Fortran, Java, Ada e Go.● A versão 4.7.1 saiu em 14 de junho deste ano.● Conta com um poderoso aliado: o GNU Debugger (gdb).●Extensa documentação, cheia de recursos, otimizaçõespara processadores específicos, proteções de código etc.● Experimente também o tcc! 7
  8. 8. Criando um projeto de exemplo● O que eu quero? Setar um dispositivo de bloco (/dev/sdX) como somente leitura ou não, para evitar escrita acidental como echo lalalaal > /dev/sdX.● #comofas O Linux possui a syscall (e uma wrapper na glibc) ioctl, que aceita os comandos BLKROSET e BLKROGET.● Consultar manual da função ioctl() $ man 2 ioctl int ioctl(int d, int request, ...); 8
  9. 9. Prova de conceito#includes...int fd = open(“/dev/sdc”, O_RDONLY);int ro = 1;ioctl(fd, BLKROSET, &ro);---# dd if=<(echo doingshit) of=/dev/sdcdd: writing to `/dev/sdc: Operation not permitted 9
  10. 10. Antes de virar um projeto...● E se der erro? Tratamento de erro (if).● O usuário sabe o que o software faz? help(), usage(), documentação, manpages.● Quais as dependências? ldd.● Preciso licenciar o código? ● Cabeçalho GPL ou de outra licença livre. 10
  11. 11. Antes de virar um projeto (cont.)...● E o Makefile? all: gcc -W -Wall -Wextra -o devprot devprot.c clean: rm -f devprot● Compilando o devprot.c $ make● Testes Várias máquinas, diferentes arquiteturas. Diferentes dispositivos de blocos (para este caso). 11
  12. 12. Distribuindo o software● Tenho fegonha! Ah, focê chula?!● Controle de versão para *código*.●Source Forge para todo o resto, como binários pré-compilados.● No Github é muito fácil enviar e receber patches. 12
  13. 13. Mercado para C●Kernel, aplicações core, alto desempenho, real time,embarcados.●Google, Opera, Mandriva, Red Hat, várias deembarcados, de telecom, de segurança...● Em alta, por tempo inderteminado!● C++ também!● Lucro (in)direto: colaborando com SL.●Outras linguagens “nativas” como D e Go vão demorarum pouco para “colar”. Enquanto isso, divirta-C. ;-) 13
  14. 14. Referências● Especificações da linguagem C http://www.mentebinaria.com.br/artigos/0x1c/0x1c-cspecs.html● WG14 http://www.open-std.org/jtc1/sc22/wg14/● Mudanças no gcc 4.7 http://gcc.gnu.org/gcc-4.7/changes.html● BLKROGET e BLKROSET definidos em /usr/src/linux/fs.h● devprot.c completo http://www.mentebinaria.com.br/files/devprot.c● Escolha um pra colaborar: https://github.com/merces 14
  15. 15. Obrigado Fernando Mercêscontato@4Linux.com.br @4LinuxBR /4linux 15

×