^I e ^@ usam a notação comum "caret" para caracteres de controle . ^I significa o caractere de controle ASCII-I, ou seja, o caractere 9, que é uma tabulação. ^@ significa o caractere ASCII control- @, ou seja, caractere 0, que em C é o caractere final da cadeia. A forma geral é ^c , em que c é uma letra maiúscula ou uma de @[\]^_ , representando o byte cujo valor é igual a c menos 64; e ^? representando o valor de byte 127 (que é o valor de byte de ? mais 64).
Existe outra, muito menos notação padrão usada por cat -A : bytes não-ASCII (isto é, valores de byte 128 e acima) são mostrados como M- seguido pela representação do byte cujo valor é 128 por menos (isto é, o valor de byte com o bit superior invertido).
cat -A não é a melhor maneira de entender a saída visualmente ambígua. Um transcrito hexadecimal fornece informações mais precisas, por exemplo,
od -t x1 /proc/cpuinfo
hd /proc/cpuinfo
Mas a partir de um programa em C, você pode usar apenas scanf para analisar as informações. Todo espaço em branco ASCII é espaço em branco para scanf e, com arquivos em /proc , você sabe que o formato será válido.