+ Responder ao Tópico



  1. :?
    não tenho idéia de por onde começar: como se faz para acessar o hardware, a partir de um programa qualquer, em ´c´, com compilação pelo gcc?

    explico: quero acessar DIRETAMENTE um floppy para leitura ´raw data´ ou mesmo destruir a trilha zero de um hd sobrescrevendo-a com FFFF (risos).. alguém tem idéia de qual a lib a ser utilizada?

  2. #2
    ABG
    Vou te ajudar até onde posso.

    Nos sistemas Unix praticamente tudo é considerado um arquivo portanto se vc quer ler o prinmeiro setor do hd, supondo que o seu harddisk seja reconhecido como hda (poderia ser hdb, sda, sdb, eda, edb, basta apenas fazer:

    fd=open("/dev/hda",O_RDWR);
    read(fd, buff, 512);

    Se quiser ler outro setor qualquer deverá posicionar o ponteiro de arquivo no setor correto

    lseek(fd, Numero_do_setor * 512) e só depois fazer a leitura ok?

    Para escrever utilize a primitiva write().

    Observe que /dev/hda corresponde a todo o disco rígido, se quiser manipular um determinada partição em seu disco use /dev/hda1, /dev/hda5. etc.. Em resumo
    /dev/[nome_dispositivo][numero_partição].

    Com relação a manipulação do disquete, creio que o dispositivo correspondente seja /dev/fd0.

    para entender um pouco mais sobre dispositivos leia : http://www.nautilus.com.br/~rei/mate...nel-linux.html

    No que diz respeito a entrada e saida do tipo "raw", eu entendo isso como entrada e saida não buferizada, isto direta.

    Existe um mecanismo para isso que é utiliza uma técnica conhecida como raw devices, leia mais sobre isso aqui http://www.tldp.org/HOWTO/SCSI-2.4-HOWTO/rawdev.html.
    Com esta técnica vc anexa um dispositivo de bloco a outro de caracter e faz entrada e saída direta.

    Outra opção é abrir o dispositivo com a opção O_DIRECT (não sei se funciona para disquetes) e efetuar as alterações. Observe que ao usar O_DIRECT na primitiva Open() vc precisa garantir que o buffer seja um múltiplo do tamanho do bloco de dispositivo, que o início do buffer esteja alinhado com esse tamanho na memória ( se não me engano vc deverá usa memalign() para alocar memória nessas condições) e lseek deve sempre posicionar sobre um deslocamente múltiplo daquele tamanho.

    open("/dev/hda",O_RDWR|O_DIRECT)

    Não verifiquei se as chamadas as funções aqui mostradas estão corretas faça isso consultando a página da GLIBC em http://www.gnu.org/software/libc/manual/ , lá vc pode baixa-la também.


    Espero ter sido útil, se tiver alguma dúvida poste-a aqui, se eu puder ajudar o farei.






Tópicos Similares

  1. Respostas: 7
    Último Post: 21-02-2015, 20:47
  2. Programa em C (linha a linha)
    Por cantisan no fórum Linguagens de Programação
    Respostas: 4
    Último Post: 26-06-2003, 10:13
  3. Usar programa em Clipper remotamente...
    Por Perdigao no fórum Servidores de Rede
    Respostas: 1
    Último Post: 04-06-2003, 09:05
  4. Respostas: 2
    Último Post: 10-04-2003, 11:01
  5. Enviar anexo por email, em modo texto.
    Por egriga no fórum Servidores de Rede
    Respostas: 5
    Último Post: 02-04-2003, 11:53

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L