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
