Ir ao conteúdo
  • Cadastre-se

'int' Unix to Linux!! Help!!


rosse77i

Posts recomendados

Olá pessoal!

Estou com um grande problema aqui!

Trabalho com programas de controle de sinalização de trens, e o sistema aqui sempre rodou em Unix. Agora estamos fazendo apenas a IHM ser em Linux, enquanto o servidor permenecerá em Unix. Existem alguns serviços na nossa IHM que precisam conversar com o servidor, ou seja Unix com Linux.

O problema é que o 'int' do Unix tem o MSB e o LSB inversos do Linux.

Usamos umas scripts para fazer a reversão, só que agora o problema está ficando muito complicado porque o código de vários serviços tem que ser trocado para isso acontecer.

Será que existe alguma maneira de eu mudar os MSB e LSB do 'int' internamente no Linux???

Não sei se expliquei direito, mas é a 1a vez que estou mexendo nessas coisas no Linux. (o Linux q estamos usando é o Red Hat)

Valeuuuuuu!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Só na mão. Esse problema de bits invertido é triste. Lidei com esse problema num estágio que fiz em programação a sistema embarcados. É bem xarope e inserir esse "módulo" no Kernel é uma boa ideia, mas exige um bom tempo de estudo em como fazê-lo.

Não se esquece, esse Kernel da RedHat é fechado, tu não vai conseguir o fonte dele para realizar essa mudança.

É mais fácil mexer no kernel do unix...

Link para o comentário
Compartilhar em outros sites

 /** Inverte bits ordem. MSB -> LSB e LSB -> MSB. * / Unsigned int reversa (unsigned int x) (unsigned int ret \u003d 0; for (int i \u003d 0; i <32; i + +) (if (x & 0x1! \u003d 0) (ret | \u003d (0x80000000>> i) ) else (x \u003d (x>> 1) return ret;) unsigned int CRC32 (unsigned char * mensagem, unsigned int msgsize, unsigned int CRC) (unsigned int i, j; / / byte contador, contador bit unsigned int byte, unsigned int poli \u003d 0x04C11DB7; i \u003d 0; for (i \u003d 0; i <msgsize; i + +) (byte \u003d mensagem [i]; / / Get próximo byte. byte \u003d reverse (byte); / / 32-bit reversão. for (j \u003d 0; j <\u003d 7; j + +) (/ / Do oito vezes. if ((int) (CRC ^ byte) <0) CrC \u003d (CRC <<1) ^ poli; else CRC CRC \u003d <<1; byte \u003d byte <<1; / / Pronto próximo bit msg.)) return reversa (~ CRC)

\\/\|/\//

Link para o comentário
Compartilhar em outros sites

Ae pessoal, muito obrigada por responderem.

anjoed, a gente já pensou em mexer no Unix mesmo.. o problema é q ele é servidor para várias máquinas, algumas Linux, outras Unix.. e aí, já viu né.. se mexer em uma teremos de mexer em todas! Mas é uma solução a se pensar...

Desculpe a ignorância, Ic3m4N, mas aonde eu coloco o código todo q você mandou?

você sugere q eu coloque no inicio dos códigos de toda a minha aplicação?

valeu!!

Link para o comentário
Compartilhar em outros sites

é um exemplo em C invertendo os valores, nao o codigo em expecifico que você precisa.

ele no caso é para um compactador, mas o principio é o mesmo.

uma outra ideia.

ao invés de linux, porque vocês nao usam freeBSD ou openSOLARIS que seria UNIX tb e nao vai ter problema de dialeto ?

\\|//

Link para o comentário
Compartilhar em outros sites

Valeu Ic3m4N!

Acho que a solução será usar um modulo inversor de bits nos meus serviços de enviar e receber mensagem, e talvez no que trata a mensagem.

Nas máquinas Unix nós já usamos OpenSolaris, e infelizmente foi vendido para o cliente que o servidor permaneceria Unix, mas a IHM (para ser mais amigável ao usuário) seria trocada de Unix para Linux.

Queria muito que desse pra resolver isso internamente, pois aí se mais alguma imcompatibilidade ocorresse, não iria mais ter esse problema, já que ele se resolveria para sempre.

Mas já vi q terei de ser mais pontual e fazer a inversão dos bits aonde precisar (q vai ser um saco.. eheheh)

Mas valeu a ajuda aí, galera!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!