Jump to content

Nicholas F

Apoiador Nibble
  • Posts

    3
  • Joined

  • Last visited

About Nicholas F

Nicholas F's Achievements

0

Reputation

  1. Excelente, era exatamente isso que eu precisava. Muito obrigado a você e ao Fernando!
  2. Valeu pela resposta, Fernando! Eu havia tentado realocar o buffer que eu criei com o mmap mas não encontrei como fazer isso. Dei uma procurada por alocação dinâmica de memória e encontrei pessoas falando sobre o malloc. Tô tentando fazer tudo com syscalls, então não queria usar o malloc. O caminho seria com o brk mesmo? Encontrei alguns exemplos em C, mas não ficou muito claro. Ou há alguma maneira de realocar um buffer que tenha sido criado com o mmap, por exemplo? Abraço!
  3. Fala, galera. Estou aprendendo assembly com nasm x64 e estou fazendo um programa que eu quero que receba uma entrada via stdin (como em echo palavra | ./programa) e armazene em um buffer para ser processado posteriormente por outras funções. Eu não posso ler byte a byte até o fim do arquivo e ir aplicando a função a cada byte do stdin (ou a cada chunk de bytes), eu preciso guardá-lo primeiro para depois aplicar a função na string inteira. O problema é que de quase todas as maneiras que pensei em fazer isso, eu preciso saber o tamanho do stdin, e não sei como determinar isso, já que é algo variávei. Tentei usar fstat() no fd do stdin (0) e a função até chegou a retornar, mas não encontrei o tamanho dele lá. Tentei ler chunks de bytes e usar mmap para cada chunk até que o arquivo termine, e isso até funcionou, mas o problema é que os chunks alocados não estão imediatamente uns após os outros, então no final das contas a string acaba ficando separada. Eu até consigo usar read() para ler chunks de bytes do stdin até o fim, mas o problema é que eu não sei como criar um buffer onde esses bytes lidos sejam armazenados sem correr o risco de dar problema se o len(stdin) for maior que o buffer. Cheguei a falar com uns gringos e me recomendaram usar mmap e/ou sbrk, mas não soube exatamente como fazer isso. A única solução que pensei e que acho que deve funcionar é ler o stdin byte a byte até o fim, ir contando os bytes, usar mmap para alocar o tamanho correto e depois ler novamente, mas acabaria tendo que usar duas vezes o read() e algo me faz pensar que há uma solução melhor para isso. Se alguém puder dar uma luz do que pode ser feito, ajudaria bastante. Estou há uns bons dias preso nisso e já passei por umas três ou quatro páginas do Google inteiras, hehe. Valeu.
×
×
  • Create New...