Eu conheço nada de Github e muito pouco de Git.
Estava olhando esse software:
Ao olhar ele, gostaria de obter alguns aprendizados:
(1) Como fazer uma janelinha como essas no GTK.
(2) Como gerar checksum SHA256 a partir de um arquivo
Sendo que não sei onde encontrar isso com facilidade. Eu tentei na pasta “src” do projeto, mas não é algo que consiga identificar facilmente.
Poderia, alguém com experiência, dar umas dicas?
Obrigado.
Bom, não conheço muito do GTK, mas nesse código aí, os códigos estão em src mesmo, sendo o main.c o arquivo principal, que chama todos os outros, conforme é solicitado.
Se quer fazer algo em GTK, acho mais interessante pegar os guias do próprio GTK e ir fazendo:
https://developer.gnome.org/guides
Localizar uma função dentro do código fonte pode ser feito com relativa facilidade usando grep -Ri palavra_chave
(ou rg
do pacote ripgrep
se você é fã da linguagem Rust) dentro da pasta do código fonte.
~/Build/gtkhash/src $ grep -Ri sha256
test.c: t(SHA256, "", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
test.c: t(SHA256, "The quick brown fox jumps over the lazy dog", "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592");
test.c: t(SHA256,
test.c: t(SHA256,
test.c: t(SHA256,
hash/hash-func.h: (X) == HASH_FUNC_SHA256 || \
hash/hash-func.h: HASH_FUNC_SHA256,
hash/hash-lib-glib.c: case HASH_FUNC_SHA256: *type = G_CHECKSUM_SHA256; break;
hash/hash-lib-crypto.c: case HASH_FUNC_SHA256: return EVP_sha256();
hash/hash-lib-linux.c: case HASH_FUNC_SHA256: return "sha256";
hash/hash-func.c: [HASH_FUNC_SHA256] = { "SHA256", 32, 64, },
hash/hash-lib-mbedtls.c: case HASH_FUNC_SHA256:
hash/hash-lib-mbedtls.c: *type = MBEDTLS_MD_SHA256;
hash/hash-lib-gcrypt.c: case HASH_FUNC_SHA256: *algo = GCRY_MD_SHA256; break;
hash/hash-lib-nettle.c: case HASH_FUNC_SHA256: *meta = &nettle_sha256; break;
check.c: MATCH(".sha256", 7, SHA256);
check.c: MATCH(".sha256sum", 10, SHA256);
check.c: gtk_file_filter_add_pattern(filter, "*.sha256");
check.c: gtk_file_filter_add_pattern(filter, "*sha256sum*");
check.c: gtk_file_filter_add_pattern(filter, "*SHA256SUM*");
Ignorando os arquivos de cima e baixo, que parecem ser testes, temos os conteúdos da pasta hash
. Parece ser um pouco de areia demais para o caminhão de um novato, já que contém implementações usando quatro bibliotecas, e ele faz switch
es/if
s e etc. para reutilizar o código.
Uma das bibliotecas que ele utiliza aí é a GLib (que é uma dependência do GTK, então você teria que usar do mesmo jeito). Creio que a maneira mais simples de reproduzir a funcionalidade do aplicativo seria usando as funções de hash dela:
4 curtidas
rod@gentoo ~ $ sha256sum burst.exe
ed82505ceed32158b508d8b74b0e36148eed2226b0d6a2e4f34d219614943070 burst.exe
rod@gentoo ~ $ sha256sum burst.exe > arquivo.txt
rod@gentoo ~ $ cat arquivo.txt
ed82505ceed32158b508d8b74b0e36148eed2226b0d6a2e4f34d219614943070 burst.exe
rod@gentoo ~ $ sha256sum -c arquivo.txt
burst.exe: SUCESSO
rod@gentoo ~ $
rod@gentoo ~/temp/asm $ ls
cc4.asm d.asm rbt.c
rod@gentoo ~/temp/asm $ mv -v cc4.asm "cc4.asm - $(sha256sum cc4.asm | cut -d' ' -f 1)"
renomeado 'cc4.asm' -> 'cc4.asm - 9e1cd1e86196214f9b3d974e22bba974790210f7802e57008cbd991ca62cdd4c'
rod@gentoo ~/temp/asm $ ls
'cc4.asm - 9e1cd1e86196214f9b3d974e22bba974790210f7802e57008cbd991ca62cdd4c' d.asm rbt.c
rod@gentoo ~/temp/asm $
Pra essas tarefas de renomear arquivo e fazer operações relativamente simples, o bash (ou sh ou qualquer outro shell) é a opção mais simples. O problema é que essa linguagem é pouco intuitiva e fica praticamente impossível aprender mexendo. Tem que assistir aula e ler manual.
Aliás indico a série do BASH do Blau Araújo, o cara é muito fera e ensina do zero ao profissional!
É essa playlist com 19 vídeos:
https://www.youtube.com/playlist?list=PLXoSGejyuQGpf4X-NdGjvSlEFZhn2f2H7
1 curtida
Se vc tem o conteúdo do arquivo dentro do programa, poderá adicional alguma biblioteca que calcule o hash. Daí vc passa o conteúdo, a função retorna o hash, e vc salva o arquivo com o nome+hash.
Já se vc tiver que carregar o conteúdo do arquivo pra passar pra biblioteca, talvez valha a pena executar o comando externo, mas não sou muito experiente nessa área.