Programação em mas de um Ambiente

1. Programação em mas de um Ambiente

West
Rosevaldo7

(usa Ubuntu)

Enviado em 28/09/2013 - 22:42h

Gostaria da ajuda de vocês galera, estou cursando Sistema de Informação uso o Ubuntu 13 mas queria aprender a programar tanto no ambiente Linux quanto no Windows e Mac OS X usando o mesmo pc queria opinião de vocês sobre isso se e uma boa ideia e como deve proceder com isso. Se alguém tiver tiver uma ideia como proceder por favor deixe um comentário desde já agradeço a todos Obrigado


  


2. Re: Programação em mas de um Ambiente

???
gokernel

(usa Linux Mint)

Enviado em 29/09/2013 - 11:16h


@Rosevaldo7:
" ... queria opinião de vocês sobre isso se e uma boa ideia e como deve proceder com isso."

Programação multi plataforma é uma boa ideia e recomendado ... programação multi plataforma é uma das qualidades de um Desenvolvedor Profissional.


É +ou- isso:



#include <stdio.h>

void plataforma (void)
{
#ifdef _WIN32
// codigo para Windows aqui:
// ...

printf ("Plataforma Windows 32 Bits\n");
#endif

#ifdef __linux__
// codigo para Linux aqui:
// ...

printf ("Plataforma Linux\n");
#endif

//---------------------------------------------------------------
//
// OBS: nao tenho certeza desta abaixo, pois nunca programei para OSX ...
//
//---------------------------------------------------------------
#ifdef __APPLE__
// codigo para APPLE aqui:
// ...

printf ("Plataforma APPLE\n");
#endif
}

int main ()
{
plataforma ();
return 0;
}




Lembrando: o código acima vai executar somente 1 para plataforma em questão.





3. Re: Programação em mas de um Ambiente

West
Rosevaldo7

(usa Ubuntu)

Enviado em 29/09/2013 - 13:21h

Obrigado gokarnel.
1- Mas tipo quero dizer assim digamos q eu esteja usando o linux para fazer um programa em C um programa quem scanei a minha rede interna e veja quantos pc's estão ligados e quais serviços estão sendo executados eu vou ter q usar uma logica pois linux usar diretórios diferente do windows e do Mac minha duvida e a seguinte como eu posso fazer um programa para o linux,windows e mac sendo que o intuito seria aprender a programar e conhecer as 3 plataformas o que voces me aconselharia ter o na raiz e o Ubuntu e o Mac na VM assim poderei programar nos 3 ao mesmo tempo ou isso não seria uma bao ideia pois tomaria muito tempo e seria mas difícil de focar no trabalho ?


4. Re: Programação em mas de um Ambiente

???
gokernel

(usa Linux Mint)

Enviado em 29/09/2013 - 14:47h


E sim eh trabalho triplicado e vc tem que conhecer bem todas as 3 plataformas...

Se vc eh inicia te em C dedique inicialmente a somente uma plataforma.

E não eh sempre que precisa desenvolver desta forma acima para tudo... isso eh somente com algumas APIs que exigem isso:

Exemplo para listar arquivos:

WINDOWS: FindFirst(); FindNext();

LINUX: opendir(); readdir();

OSX; ... acredito que seja do mesmo modo que linux...NAO SEI.


5. Re: Programação em mas de um Ambiente

???
gokernel

(usa Linux Mint)

Enviado em 29/09/2013 - 16:18h


Um pequeno exemplo de listar arquivos Windows/Linux:



void list_files (void)
{
#ifdef _WIN32
{

int done;
struct _finddata_t find;

done = _findfirst ("*.*", &find);

do {

printf ("%s\n", find.name);

} while ( !_findnext(done, &find) );

_findclose (done);

}
#endif // _WIN32


#ifdef __linux__
{
DIR *dir;
struct dirent *entry;
struct stat s;

dir = opendir ("./");

for (;;) {

entry = readdir (dir);

if (!entry) break;

printf ("%s\n", entry->d_name);
}

closedir(dir);

}
#endif // __linux__
}





Um exemplo de tornar um "string" executavel Windows/Linux e funcionou tambem no Android(como base do OS):



void asm_set_executable (void *ptr, unsigned long len)
{
#ifdef _WIN32
unsigned long old_protect;

if (!VirtualProtect(ptr, len, PAGE_EXECUTE_READWRITE, &old_protect))
{
printf ("ERROR: asm_set_executable() ... NOT FOUND - VirtualProtect()\n");
exit (-1);
}
#endif

#ifdef __linux__
unsigned long start, end, PageSize;

PageSize = sysconf (_SC_PAGESIZE);
start = (unsigned long)ptr & ~(PageSize - 1);
end = (unsigned long)ptr + len;
end = (end + PageSize - 1) & ~(PageSize - 1);
if (mprotect((void *)start, end - start, PROT_READ | PROT_WRITE | PROT_EXEC) == -1)
{
printf ("ERROR: asm_set_executable() ... NOT FOUND - mprotec()\n");
exit (-1);
}
#endif
}










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts