programacion principales librerias lenguaje funciones ejemplos definicion crear clases cabeceras biblioteca c operating-system systems-programming

principales - librerias en lenguaje c y sus funciones



¿La implementación de las bibliotecas C depende del sistema operativo? (4)

Sí, lo tienes. No hay mucho que pueda agregar.

Pero hasta donde yo sé, el sistema operativo está sirviendo a las bibliotecas y se acaban de vincular. La razón de esto es que los programadores que desarrollan las implementaciones específicas del sistema conocen mejor su propio sistema. Implementar un fopen() no es solo pedirle al Disco Duro un carril para sus cosas. (usted probablemente sabe)

Debe respetar muchas circunstancias de otras implementaciones que funcionan con descriptores de archivos. Y tal vez tenga que confiar en algo que sucede en una función específica de su sistema operativo, lo que para el comportamiento de Generell no es necesario. Pero en su entorno esto lo mantiene funcionando.

Es también por eso que el estándar C dice que cambiar el código fuente de las bibliotecas estándar da como resultado un comportamiento indefinido, incluso si la función en sí misma sigue sirviendo el mismo comportamiento (intenté encontrar la cita para usted pero no pude, lo siento).

Entonces, en absoluto es una cosa de optimización. Podría haber una implementación genérica pero, como la mayoría del sistema operativo se basa en estas implementaciones, todos los sistemas operativos están interesados ​​en hacer que funcionen mejor para su propio caso.

(probablemente no el único, pero no soy tan profundo en el desarrollo del sistema operativo como podría nombrar a otro)

Me pregunto si existen diferentes funciones en diferentes sistemas operativos, pero sirven para el mismo propósito, o se puede decir que diferentes sistemas operativos tienen diferentes lenguajes de programación del sistema (como el de Windows frente al de UNIX).

Entonces, por ejemplo, como la biblioteca C consiste en la implementación de funciones, su implementación debe llamar funciones distintas (dependiendo del sistema operativo) para implementar lo mismo. ¿Es esto correcto? Entonces, ¿se utilizan bibliotecas en cygwin para compilar el programa C especialmente escrito para Windows, y el de gcc, especialmente para Linux? ¿Estoy en lo correcto? Si no, ¿por qué?


Si, eso es correcto. Diferentes sistemas operativos tienen diferentes funciones que hacen lo mismo. Por ejemplo, en Windows, usted crea un hilo llamando a CreateThread() , mientras que en Linux llama a pthread_create() .

Acerca del tiempo de ejecución de C, todos los sistemas operativos los implementan, pero de manera diferente. En Windows, fopen() es un contenedor que llamará a CreateFile() , mientras que en Linux fopen() es un contenedor para open() .

Cygwin y los gustos agregan bibliotecas para implementar la función de solo Linux en Windows. Por ejemplo, cygwin implementará pthread_create() en Windows, envolviendo CreateThread() , como MS lo hizo para fopen() .


Tenga en cuenta que existen dos tipos de funciones de biblioteca: utilidades y envoltorios de sistema. Digamos que usted es un proveedor que intenta crear una biblioteca portátil.

Las funciones de utilidad como sprintf y atoi van a ser las mismas en cualquier implementación porque no necesitan servicios del sistema operativo.

Normalmente, tendrías una capa de abstracción en tu biblioteca. Es posible que tenga una función como

void * getBytesFromOS (unsigned int count) ;

que asigna páginas de memoria. Tendría diferentes implementaciones para varios sistemas. Una función malloc que utiliza dicha interfaz puede ser un 99% la misma en todos los sistemas operativos.


Sí.

Para agregar a la respuesta de ElderBug , las bibliotecas de C que actúan como envoltorios para diferentes tipos de llamadas al sistema varían según los sistemas. Las llamadas al sistema, como las siguientes (de los sistemas operativos de la NYU, conferencia n. 4 ), cambian el proceso del modo de usuario al modo de supervisor / kernel.

Tenga en cuenta el objetivo de diferenciar entre el modo de usuario (los envoltorios) y el modo kernel (la implementación del sistema operativo), de la conferencia:

Un objetivo importante del sistema operativo es que la semántica de llamadas a procedimientos simples se observa desde el punto de vista del proceso del usuario. La complejidad está oculta dentro del kernel mismo, otro ejemplo más del sistema operativo que proporciona una máquina virtual más abstracta, es decir, más simple, a los procesos del usuario.

Como usted sabe, estas llamadas de muestra no son similares en diferentes sistemas operativos, como Windows y Linux, pero los nombres de las funciones de C wrappers son, de otro modo, el lenguaje precompilado en sí mismo sería diferente en todos los sistemas.

¡Espero que ayude!