¿No hay indicadores O_BINARY y O_TEXT en Linux?

3 minutos de lectura

Al usar IO a nivel de sistema en Linux, noté que el compilador reconoció el O_RDONLY y O_RDWR banderas, pero no tena idea alguna en cuanto al significado de la O_BINARY y O_TEXT banderas

¿Es esto una cosa de Linux?

  • La documentación de Python es rara en ese caso. Las constantes están antes de la descripción de la sección. bit.ly/1MmFT51 Mucha gente leería: “Estas constantes solo están disponibles en Unix” en lugar de “Estas constantes solo están disponibles en Windows”

    – yucer

    16 de marzo de 2016 a las 15:14


Linux, y casi todos los sabores de Unix, no diferencian entre archivos binarios y de texto. Por lo tanto, no hay constantes estándar con ese nombre. Puede definir manualmente las constantes para que sean cero en Linux si desea incluirlas en su código con fines de portabilidad.

http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-03/msg00147.html

  • enlace roto Intente agregar desde ese enlace las partes esenciales para que, incluso si no funciona, podamos entender lo que quiere decir.

    – Catalina Sirbu

    17 de noviembre de 2020 a las 11:29

Es una cosa de *nix. *Los sistemas operativos nix no realizan conversión automática de avance de línea para E/S en archivos de “texto”, por lo que los indicadores O_TEXT y O_BINARY no tendrían sentido.

  • Responde a la pregunta, informa y educa. Prestigio

    – Jay

    15 mayo 2016 a las 13:31

En el nivel del lenguaje C y su biblioteca estándar, no existe tal cosa como O_BINARY y O_TEXT banderas El modo binario o de texto se selecciona agregando el b especificador del parámetro de modo de fopen función. El especificador en sí es, por supuesto, compatible con todas las implementaciones de C, pero en las plataformas POSIX este especificador no tiene ningún efecto: según la especificación POSIX, el modo de texto es el mismo que el modo binario.

Como era de esperar, si profundiza en el nivel de las funciones de E/S de Unix específicas de la plataforma no estándar, descubrirá que no tienen conocimiento de esa distinción de texto/binario en absoluto.

  • O_BINARY/O_TEXT son argumentos para la función abierta, no para la función fopen. El estándar C no define una función abierta, pero Posix sí, al igual que Windows. Sin embargo, solo Windows necesita comprender la diferencia entre texto y binario, por lo que solo Windows define O_BINARY/O_TEXT. (En mi opinión esto es una vergüenza).

    – Martin Bonner apoya a Mónica

    13 de octubre de 2015 a las 9:42

Windows usa \r\n para finales de línea, Linux (y otros similares a Unix) usan solo \n. En Windows, leer O_BINARY le brinda los datos sin procesar, posiblemente finales de línea impares y todo, mientras que O_TEXT normaliza los finales de línea, por lo que su código C solo ve un carácter.

Bajo Linux et al, no tiene sentido distinguir entre texto y binario, porque los datos solo tienen un carácter de todos modos, por lo que las banderas son innecesarias.

No hay diferencia en el nivel del sistema operativo entre archivos binarios y de texto en Unix. El archivo de texto tiene solo un contenido restringido. Eso también es cierto para Windows, pero las convenciones utilizadas por C para el final de las líneas son las mismas que las utilizadas por Unix, mientras que Windows usa el par CR/LF (y un marcador explícito de fin de archivo en algunos contextos, pero el manejo de eso no fue consistente incluso en los programas del sistema la última vez que lo verifiqué), por lo que se necesita un mapeo para respetar las convenciones exigidas por C.

¿Ha sido útil esta solución?