Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

Comandos Programação Linux

Basicos de C

strcpy(newstr,str)                        /* copia str para newstr */
    expr1 ? expr2 : expr3                     /* if (expr1) expr2 else expr3 */
    x = (y > z) ? y : z;                      /* if (y > z) x = y; else x = z; */
    int a[]={0,1,2};                          /* Array inicializada (ou a[3]={0,1,2}; */
    int a[2][3]={{1,2,3},{4,5,6}};            /* Array de array de ints */
    int i = 12345;                            /* Converte de i para char str */
    char str[10];
    sprintf(str, "%d", i);

Exemplo de C

Um programa c mínimo simple.c:

#include <stdio.h>
    main() {
        int number=42;
        printf("The answer is %i\n", number);
    }

Compile com o:

# gcc simple.c -o simple
    # ./simple
    The answer is 42

Básicas do C++

*pointer                                  // Objeto apontado pelo apontador
    &obj                                      // Endereço do objeto obj
    obj.x                                     // Membro x da classe obj (objeto obj)
    pobj->x                                   // Membro x da classe apontado para pobj
                                              // (*pobj).x e pobj->x são os mesmos

Exemplo de C++

Com um programa ligeiramete mais realístico em C++: uma classe em seu próprio header (IPv4.h) e a implementação (IPv4.cpp) e um programa que utiliza a funcionalidade da classe. A classe converte um endereço de IP em formato integer para o formato de cadeia conhecido.

Classe IPv4

IPv4.h:

#ifndef IPV4_H
    #define IPV4_H
    #include <string>

    namespace GenericUtils {                          // gera um namespace
    class IPv4 {                                      // definição de classe
    public:
        IPv4(); ~IPv4();
        std::string IPint_to_IPquad(unsigned long ip);// interface membro
    };
    } //namespace GenericUtils
    #endif // IPV4_H
    

IPv4.cpp:

#include "IPv4.h"
    #include <string>
    #include <sstream>
    using namespace std;                              // utiliza os namespaces
    using namespace GenericUtils;

    IPv4::IPv4() {}                                   // construtor/destrutor padrão
    IPv4::~IPv4() {}
    string IPv4::IPint_to_IPquad(unsigned long ip) {  // implementação membro
        ostringstream ipstr;                          // utiliza uma stringstream
        ipstr << ((ip &0xff000000) >> 24)             // Bitwise right shift
              << "." << ((ip &0x00ff0000) >> 16)
              << "." << ((ip &0x0000ff00) >> 8)
              << "." << ((ip &0x000000ff));
        return ipstr.str();
    }

o programa simplecpp.cpp

#include "IPv4.h"
    #include <iostream>
    #include <string>
    using namespace std;
    int main (int argc, char* argv[]) {
        string ipstr;                                 // define variáveis
        unsigned long ipint = 1347861486;             // O IP em forma integer
        GenericUtils::IPv4 iputils;                   // gera um objeto da classe
        ipstr = iputils.IPint_to_IPquad(ipint);       // chama a classe membro
        cout << ipint << " = " << ipstr << endl;      // imprime o resultado

        return 0;
    }

Compile e execute com:

# g++ -c IPv4.cpp simplecpp.cpp                # Compile em objetos
    # g++ IPv4.o simplecpp.o -o simplecpp.exe      # Linka os objetos para o executável final
    # ./simplecpp.exe 
    1347861486 = 80.86.187.238

Utilize ldd para verificar que bibliotecas são utilizadas pelo executável e aonde eles ficam localizados. utilize também para verificar se uma biblioteca compartilhada está faltando ou se o executável é estático.

# ldd /sbin/ifconfig                           # lista dependências de objeto dinâmico
    # ar rcs staticlib.a *.o                       # gera arquivo estático
    # ar t staticlib.a                             # imprime a lista de objetos do arquivo
    # ar x /usr/lib/libc.a version.o               # extrai um objeto arquivo
    # nm version.o                                 # Exibe membros de função fornecidas pelo objeto

Simples Makefile

O Makefile mínimo para o programa multi-source é exibido abaixo. As linhas com instruções devem iniciar com um tab! A barra invertida (back slash) “\” pode ser utilizada para cortar linhas longas.

CC = g++
    CFLAGS = -O
    OBJS = IPv4.o simplecpp.o

    simplecpp: ${OBJS}
    	${CC} -o simplecpp ${CFLAGS} ${OBJS}
    clean:
    	rm -f ${TARGET} ${OBJS}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *