En aquest tema, aprendrem com utilitzar el llenguatge de programació C en l'entorn OpenVMS. Explorarem com compilar i executar programes en C, així com les particularitats i les biblioteques específiques d'OpenVMS que poden ser útils per als desenvolupadors.
Continguts
Introducció a C a OpenVMS
El llenguatge de programació C és àmpliament utilitzat en el desenvolupament de sistemes operatius, aplicacions i eines de programari. OpenVMS proporciona un entorn robust per al desenvolupament en C, amb suport per a diverses biblioteques i eines de desenvolupament.
Característiques Clau
- Portabilitat: Els programes en C poden ser portats fàcilment a altres sistemes operatius.
- Eficiència: C permet un control detallat sobre els recursos del sistema.
- Compatibilitat: OpenVMS ofereix compatibilitat amb estàndards de C com ANSI C i ISO C.
Compilació i Enllaç de Programes en C
Per compilar i enllaçar programes en C a OpenVMS, utilitzarem el compilador de C proporcionat pel sistema. A continuació, es mostren els passos bàsics per compilar i executar un programa en C.
Pas 1: Crear el Codi Font
Creeu un fitxer amb el codi font del vostre programa en C. Per exemple, creeu un fitxer anomenat hello.c
amb el següent contingut:
Pas 2: Compilar el Programa
Utilitzeu la comanda CC
per compilar el fitxer de codi font. Aquesta comanda generarà un fitxer objecte.
Pas 3: Enllaçar el Programa
Utilitzeu la comanda LINK
per enllaçar el fitxer objecte i crear l'executable.
Pas 4: Executar el Programa
Finalment, executeu el programa resultant.
Si tot ha anat bé, veureu la sortida següent:
Biblioteques i Funcions Específiques d'OpenVMS
OpenVMS proporciona diverses biblioteques i funcions específiques que poden ser utilitzades en programes en C per aprofitar les característiques del sistema operatiu.
Biblioteques Comunes
- LIB$: Funcions de suport general.
- SYS$: Funcions de sistema per a la gestió de processos, fitxers, etc.
- STR$: Funcions de manipulació de cadenes.
Exemple d'Ús de Funcions Específiques
A continuació es mostra un exemple d'ús de la funció LIB$GETJPI
per obtenir informació sobre el procés actual.
#include <stdio.h> #include <descrip.h> #include <lib$routines.h> #include <jpidef.h> int main() { unsigned long pid = -1; // PID del procés actual unsigned long status; unsigned long buffer; struct dsc$descriptor_s desc; desc.dsc$w_length = sizeof(buffer); desc.dsc$a_pointer = (char *)&buffer; desc.dsc$b_dtype = DSC$K_DTYPE_LU; desc.dsc$b_class = DSC$K_CLASS_S; status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0); if (status & 1) { printf("PID del procés actual: %lu\n", buffer); } else { printf("Error obtenint el PID\n"); } return 0; }
Exemple Pràctic
A continuació, es presenta un exemple pràctic que combina diverses funcions de les biblioteques d'OpenVMS per crear un programa més complex.
Codi Font
#include <stdio.h> #include <descrip.h> #include <lib$routines.h> #include <jpidef.h> #include <ssdef.h> void print_process_info() { unsigned long pid = -1; // PID del procés actual unsigned long status; unsigned long buffer; struct dsc$descriptor_s desc; desc.dsc$w_length = sizeof(buffer); desc.dsc$a_pointer = (char *)&buffer; desc.dsc$b_dtype = DSC$K_DTYPE_LU; desc.dsc$b_class = DSC$K_CLASS_S; status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0); if (status & 1) { printf("PID del procés actual: %lu\n", buffer); } else { printf("Error obtenint el PID\n"); } } int main() { printf("Informació del procés a OpenVMS:\n"); print_process_info(); return 0; }
Compilació i Execució
-
Compilar:
$ CC process_info.c
-
Enllaçar:
$ LINK process_info
-
Executar:
$ RUN process_info
Exercicis Pràctics
Exercici 1: Hola, OpenVMS!
Creeu un programa en C que imprimeixi "Hola, OpenVMS!" a la pantalla. Compileu-lo, enllaceu-lo i executeu-lo.
Exercici 2: Informació del Sistema
Modifiqueu l'exemple pràctic per obtenir i imprimir informació addicional del procés, com ara el nom del procés i l'estat.
Exercici 3: Gestió de Fitxers
Creeu un programa en C que creï un fitxer, escrigui algunes dades en ell i després les llegeixi i les imprimeixi a la pantalla.
Solucions
Solució Exercici 1
Solució Exercici 2
#include <stdio.h> #include <descrip.h> #include <lib$routines.h> #include <jpidef.h> #include <ssdef.h> void print_process_info() { unsigned long pid = -1; // PID del procés actual unsigned long status; unsigned long buffer; struct dsc$descriptor_s desc; desc.dsc$w_length = sizeof(buffer); desc.dsc$a_pointer = (char *)&buffer; desc.dsc$b_dtype = DSC$K_DTYPE_LU; desc.dsc$b_class = DSC$K_CLASS_S; status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0); if (status & 1) { printf("PID del procés actual: %lu\n", buffer); } else { printf("Error obtenint el PID\n"); } // Obtenir el nom del procés char proc_name[16]; desc.dsc$w_length = sizeof(proc_name); desc.dsc$a_pointer = proc_name; desc.dsc$b_dtype = DSC$K_DTYPE_T; desc.dsc$b_class = DSC$K_CLASS_S; status = lib$getjpi(&JPI$_PRCNAM, &pid, 0, &desc, 0, 0); if (status & 1) { printf("Nom del procés: %s\n", proc_name); } else { printf("Error obtenint el nom del procés\n"); } } int main() { printf("Informació del procés a OpenVMS:\n"); print_process_info(); return 0; }
Solució Exercici 3
#include <stdio.h> int main() { FILE *file; char data[] = "Això és una prova d'escriptura en un fitxer a OpenVMS."; // Crear i escriure en el fitxer file = fopen("testfile.txt", "w"); if (file == NULL) { printf("Error obrint el fitxer per escriure\n"); return 1; } fprintf(file, "%s\n", data); fclose(file); // Llegir del fitxer file = fopen("testfile.txt", "r"); if (file == NULL) { printf("Error obrint el fitxer per llegir\n"); return 1; } char buffer[100]; while (fgets(buffer, sizeof(buffer), file) != NULL) { printf("%s", buffer); } fclose(file); return 0; }
Conclusió
En aquest tema, hem après com utilitzar el llenguatge de programació C a OpenVMS, incloent la compilació, l'enllaç i l'execució de programes. També hem explorat algunes de les biblioteques i funcions específiques d'OpenVMS que poden ser útils per als desenvolupadors. Els exercicis pràctics proporcionats us ajudaran a consolidar els coneixements adquirits.
Curs de Programació OpenVMS
Mòdul 1: Introducció a OpenVMS
- Què és OpenVMS?
- Història i Evolució d'OpenVMS
- Conceptes Bàsics i Terminologia
- Visió General de l'Arquitectura del Sistema
- Instal·lació i Configuració
Mòdul 2: Comandes Bàsiques d'OpenVMS
- Introducció a DCL (Digital Command Language)
- Comandes de Gestió de Fitxers
- Comandes de Gestió de Processos
- Comandes de Gestió del Sistema
- Ús de l'Ajuda i la Documentació
Mòdul 3: Sistema de Fitxers d'OpenVMS
- Estructura del Sistema de Fitxers
- Tipus i Atributs de Fitxers
- Operacions amb Fitxers
- Gestió de Directoris
- Control d'Accés i Seguretat
Mòdul 4: Scripting amb DCL
- Introducció al Scripting amb DCL
- Variables i Tipus de Dades
- Estructures de Control
- Subrutines i Funcions
- Gestió d'Errors
Mòdul 5: Gestió del Sistema OpenVMS
- Gestió de Comptes d'Usuari
- Gestió de Discs i Volums
- Procediments de Còpia de Seguretat i Restauració
- Monitorització del Sistema i Optimització del Rendiment
- Gestió de Parches i Actualitzacions
Mòdul 6: Xarxes a OpenVMS
- Conceptes Bàsics de Xarxes
- Configuració de TCP/IP
- Configuració de DECnet
- Serveis i Protocols de Xarxa
- Resolució de Problemes de Xarxa
Mòdul 7: Programació Avançada a OpenVMS
- Introducció als Llenguatges de Programació d'OpenVMS
- Ús de C a OpenVMS
- Ús de Fortran a OpenVMS
- Ús de COBOL a OpenVMS
- Interfície amb Serveis del Sistema
Mòdul 8: Clúster d'OpenVMS
- Introducció als Clústers
- Configuració i Gestió de Clústers
- Comunicació en Clúster
- Failover i Equilibri de Càrrega
- Seguretat en Clúster
Mòdul 9: Seguretat a OpenVMS
- Conceptes de Seguretat i Millors Pràctiques
- Autenticació i Autorització d'Usuaris
- Auditoria i Monitorització
- Xifrat de Dades
- Resposta i Recuperació d'Incidents