programando software livre em c

15
1

Upload: 4linuxbr

Post on 26-Jun-2015

615 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Programando Software Livre em C

1

Page 2: Programando Software Livre em C

2

Programando Software Livre em C

Fernando Mercês

Page 3: Programando Software Livre em C

3

Agenda

● Por que o C nunca vai sumir?

● A suíte de compiladores GNU

● Criando um projeto de exemplo

● Distribuindo o software

● Mercado

Page 4: Programando Software Livre em C

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 de bibliotecas não portáveis! E ainda existe Cygwin!

● Quem falou que C é velho? A última atualização da especificação foi em 2011.

● O comitê WG14 da ISO/IEC especificou na C11 recursos como multithreading (thread.h), bound checking em funções como strcpy() e estruturas anônimas.

Page 5: Programando Software Livre em C

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ções para processadores específicos, proteções de código etc.

● Mas existem outros livres como CLang, tcc...

Page 6: Programando Software Livre em C

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("%d\n", i);

return 0;}

$ chmod +x ate3.c$ ./ate3.c

---$ cat << EOF | tcc -run ->main(void) { puts("Diz aê pro tcc!"); }>EOF

Page 7: Programando Software Livre em C

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ções para processadores específicos, proteções de código etc.

● Experimente também o tcc!

Page 8: Programando Software Livre em C

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.

● #comofasO 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 ioctlint ioctl(int d, int request, ...);

Page 9: Programando Software Livre em C

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

Page 10: Programando Software Livre em C

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.

Page 11: Programando Software Livre em C

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

● TestesVárias máquinas, diferentes arquiteturas.Diferentes dispositivos de blocos (para este caso).

Page 12: Programando Software Livre em C

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.

Page 13: Programando Software Livre em C

13

Mercado para C

● Kernel, aplicações 'core', alto desempenho, real time, embarcados.

● Google, Opera, Mandriva, Red Hat, várias de embarcados, 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 demorar um pouco para “colar”. Enquanto isso, divirta-C. ;-)

Page 14: Programando Software Livre em C

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

Page 15: Programando Software Livre em C

15

Obrigado

Fernando Mercê[email protected]

@4LinuxBR

/4linux