{"id":18278946,"url":"https://github.com/fabiokleis/toscop","last_synced_at":"2026-05-04T21:35:07.798Z","repository":{"id":197660353,"uuid":"616699281","full_name":"Fabiokleis/toscop","owner":"Fabiokleis","description":"uma versão tosca do comando top escrito em C","archived":false,"fork":false,"pushed_at":"2023-10-05T12:53:34.000Z","size":909,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T11:46:49.017Z","etag":null,"topics":["c","c11","hacktoberfest","latex","linux","ncurses","posix","procfs","pthreads","top","tui"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fabiokleis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-03-20T22:44:28.000Z","updated_at":"2024-07-10T10:55:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"b90d46b6-5fa3-4df7-a642-239f4a9cf359","html_url":"https://github.com/Fabiokleis/toscop","commit_stats":null,"previous_names":["fabiokleis/toscop"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fabiokleis%2Ftoscop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fabiokleis%2Ftoscop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fabiokleis%2Ftoscop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fabiokleis%2Ftoscop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fabiokleis","download_url":"https://codeload.github.com/Fabiokleis/toscop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247980822,"owners_count":21027803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","c11","hacktoberfest","latex","linux","ncurses","posix","procfs","pthreads","top","tui"],"created_at":"2024-11-05T12:26:46.787Z","updated_at":"2026-05-04T21:35:02.778Z","avatar_url":"https://github.com/Fabiokleis.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Toscop\n[![C Compilation CI](https://github.com/Fabiokleis/toscop/actions/workflows/c-compilation-ci.yml/badge.svg?branch=main)](https://github.com/Fabiokleis/toscop/actions/workflows/c-compilation-ci.yml)\n\numa versão tosca do comando top,\ntrabalho para disciplina de sistemas operacionais.\n\n![toscop4](https://user-images.githubusercontent.com/66813406/231803102-dae021aa-228b-4f96-8255-e3e38ff0d919.gif)\n\n## Dependências \n\nO projeto utiliza a lib ncurses para interface no terminal.\n\nDebian\n```console\nsudo apt-get install libncurses5-dev libncursesw5-dev\n```\n\nFedora\n```console\nsudo dnf install ncurses-devel\n```\n\nArch Linux\n```console\nsudo pacman -S ncurses\n```\n\n## Build e Run\n\nArquivo Makefile deste projeto:\n```Makefile\nCC = gcc\nCOMPILER_FLAGS = -ggdb -Wall -Wextra -Wpedantic -std=c11\nSOURCES = ./src/*.c\nINCLUDES = -I ./include/\nLINKER_FLAGS = -lncurses -lpthread \nNAME = toscop\nTEX = $(NAME).tex\n\n.PHONY: all\nall: $(NAME)\n\n$(NAME): build\n\t$(CC) $(SOURCES) $(COMPILER_FLAGS) $(LINKER_FLAGS) $(INCLUDES) -o ./build/$(NAME)\n\nrun: $(NAME) \n\t@./build/$(NAME)\n\ninstall: $(NAME)\n\tinstall -m 0755 ./build/$(NAME) /usr/local/sbin/$(NAME)\n\ntex:\n\tpdflatex -shell-escape -interaction=batchmode $(TEX) \n\t@rm $(NAME).log \n\nbuild:\n\t@mkdir -p build/\n\nclean:\n\trm -f ./build/$(NAME)\n\trmdir ./build\n```\n\nPara compilar:\n```console\nmake toscop\n```\nPara compilar e rodar:\n```console\nmake run\n```\n\n## Opções \nPara rodar com informações de debug:\n```console\n./build/toscop -v\n```\nPara rodar com um refresh time específico (default 3):\n```console\n./build/toscop -d5\n```\n\n## Install\nPara instalar o toscop no `/usr/local/sbin/toscop`, a permissão fica 0755\n```console\nsudo make install\n```\n\n## toscop LaTeX\nPara gerar o documento pdf verifique se tem instalado os pacotes LaTeX utilizados\nno documento `toscop.tex` na raiz desse repositório, para então rodar no shell:\n```console\nmake tex\n```\n\n## Referências\n- https://wiki.inf.ufpr.br/maziero/lib/exe/fetch.php?media=socm:socm-livro.pdf \n- https://man7.org/linux/man-pages/man2/syscalls.2.html                # lista com todas as syscalls\n- https://man7.org/linux/man-pages/man2/sysinfo.2.html                 # struct para pegar informacoes gerais do sistema (memoria, swap, load avg...)\n- https://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html      # tipo do diretorio, utilizado para ler o /proc/[pid] \n- https://pubs.opengroup.org/onlinepubs/7908799/xsh/readdir.html       # funcao que retorna um struct dirent\n- https://man7.org/linux/man-pages/man0/sys_stat.h.0p.html             # para entender como pegar informacoes de arquivo com a funcao stat \n- https://linux.die.net/man/3/snprintf                                 # para concatenar strings com formatacao\n- https://linux.die.net/man/3/getpwuid                                 # para obter informacoes de usuario com base no uid\n- https://man7.org/linux/man-pages/man2/nice.2.html                    # para entender oque é nice\n- https://linux.die.net/man/3/ctime                                    # para obter o tempo do sistema com o struct tm\n- https://pubs.opengroup.org/onlinepubs/7908799/xcurses/curses.h.html  # ncurses para criar a interface do programa toscop\n- https://man7.org/linux/man-pages/man5/proc.5.html                    # man do proc para ver quais arquivos preciso ler\n- https://man7.org/linux/man-pages/man3/pthread_create.3.html          # para criar threads\n- https://man7.org/linux/man-pages/man3/pthread_attr_init.3.html       # para criar os atributo para dar join\n- https://linux.die.net/man/3/pthread_mutex_init                       # para entender as maneiras de inicializar mutex\n- https://linux.die.net/man/3/pthread_mutex_lock                       # funcao para dar lock em um mutex\n- https://linux.die.net/man/3/pthread_mutex_destroy                    # funcao para desalocar um mutex \n- https://pubs.opengroup.org/onlinepubs/7908799/xsh/time.h.html        # para entender os variados tipos de tempo e as maneiras de mensura-lo \n- https://man7.org/linux/man-pages/man3/clock_gettime.3.html           # funcao para obter o tempo a partir de um tipo de CLOCK \n- https://man7.org/linux/man-pages/man1/top.1.html                     # para entender como é calculado os valores de uso do cpu\n- https://en.wikipedia.org/wiki/Load_%28computing%29                   # para entender como calcular o load average, ler o /usr/include/linux/sysinfo.h\n- https://man7.org/linux/man-pages/man3/getline.3.html                 # funcao para ler apenas uma linha, troquei o fgets\n- https://man7.org/linux/man-pages/man3/strstr.3.html                  # funcao para verificar se um char* é substr de outro char*\n- https://man7.org/linux/man-pages/man1/free.1.html                    # onde encontrar os campos de memoria e como calcular os campos necessarios\n- https://tldp.org/HOWTO/pdf/NCURSES-Programming-HOWTO.pdf             # livro de ncurses\n- https://man7.org/linux/man-pages/man2/getpagesize.2.html             # como ler um tamanho portavel de pagina (syscall sysconf(_SC_PAGESIZE))\n- https://man7.org/linux/man-pages/man0/stdint.h.0p.html               # tipos long, long long, unsigned long... de uma maneira mais concisa\n- https://www.gnu.org/software/libc/manual/html_node/Getopt.html       # como fazer o parse do argv \n- https://linux.die.net/man/3/strncpy                                  # copiar char* de forma segura\n- https://man7.org/linux/man-pages/man3/localtime.3p.html              # localtime, utilizado em conjunto com time\n- https://linux.die.net/man/1/pdflatex                                 # comando para gerar pdf a partir de um file tex\n- https://github.com/coreutils/coreutils                               # codigo fonte de todos os programas do coreutils\n- https://man7.org/linux/man-pages/man5/fstab.5.html                   # para entender o formato /proc/self/mounts\n- https://man7.org/linux/man-pages/man2/statfs.2.html                  # syscall para obter informacoes de filesystems\n- https://man7.org/linux/man-pages/man3/statvfs.3.html                 # wrapper da syscall statfs que diz nas notas que foi deprecated pelo LSB\n- https://man7.org/linux/man-pages/man3/getmntent.3.html               # para nao ter que fazer o parse do /proc/self/mounts na mao, leia /usr/include/mntent.h\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiokleis%2Ftoscop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabiokleis%2Ftoscop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabiokleis%2Ftoscop/lists"}