significado - ¿Qué significa "^ @" en el archivo?
que significa el codigo head en html (2)
Código:
int fd;
fd = open("fruit", O_WRONLY);
write(fd, "apple", sizeof("apple"));
close(fd);
Lo compilo con
$ gcc test.c -o test
y corre como
$ ./test
Luego abro el archivo de fruit
y veo lo siguiente en el archivo:
apple^@
¿Qué significa el ^@
?
Es el código de carácter nulo ''/0''
. Algunos editores como vi lo muestran como ^@
.
sizeof("apple")
devolvería 6 porque incluye el carácter nulo utilizado para terminar cadenas.
El ^@
es la forma en que comúnmente se representa un ASCII NUL en forma imprimible. Eso es lo mismo que el carácter @
con algunos bits eliminados:
@ = 0100
^@ = 0
y es lo mismo que ''/0''
(el terminador de cadena en C). Debido a que es el terminador de cadena, no lo verá desde printf
o sus funciones relacionadas, pero puede crearlo fácilmente utilizando la write
orientada a bloques. Por ejemplo, podrías haber escrito
write(fd,"apple/0orange",sizeof("apple/0orange"));
y visto
apple^@orange^@
porque cada literal de doble cita en C tiene un terminador de cadena final que se cuenta en su tamaño. Si tuvieras la intención de escribir la cadena sin su terminador, podrías haber hecho esto:
const char *s = "apple";
write(fd,s,strlen(s));
eliminando así dos problemas en el ejemplo: (a) longitud incorrecta y (b) posiblemente utilizando un contenido y duración de cadena inconsistentes al garantizar que ambos sean el mismo elemento. Vea Sizeof string literal para algunos comentarios en (a).
NUL
es uno de los 32 caracteres de control ASCII cuyos valores van de 0 a 31, llamados controles C0 . Todos estos caracteres de control ASCII normalmente se muestran de esta forma (para una forma imprimible), utilizando el carácter correspondiente a la suma de 64 (0100) al valor del carácter de control.
ASCII DEL
es 127 (0177). ¿Lo muestra como ^?
es un caso especial que es más reciente que los otros caracteres de control ASCII. Por ejemplo, X / Open terminfo (curses) no define una forma imprimible para este personaje, aunque sí lo hace para los demás. A diferencia de los otros caracteres de control ASCII, DEL
se forma al ordenar todos los (siete) bits en el personaje.
ASCII es un código de 7 bits, por supuesto. Muchos otros códigos fueron desarrollados; ASCII corresponde al conjunto de caracteres portátil POSIX , por lo que se encuentra con frecuencia.
Es fácil encontrar tablas de caracteres ASCII con una búsqueda web. La mayoría de estas tablas (o la discusión que las acompaña) se desvían hacia la desinformación. Aquí hay un enlace a una página razonablemente objetiva, titulada Conjunto de caracteres ASCII . Afirma
La tecla Control resta 64 del valor de las teclas que modifica.
Sin embargo, la declaración solo es correcta si la clave es una del conjunto @
, A
, B
, etc. Si aplica eso a otras claves, los resultados son quizás interesantes pero no útiles. Más bien, en un programa C harías un enmascaramiento lógico, por ejemplo,
ch = ch & 037;
para obtener un personaje en el rango de 0 a 31.