Pagina 1 di 1
problema system call C
Inviato: mercoledì 27 maggio 2015, 12:45
da gian2991
buongiorno,
per un progetto di universià dobbiamo fare un programma usando le system call invece delle normali istruzioni, purtroppo però il professore non spiega molto bene, e non ci ho capito molto.
ad esempio per richiedere di inserire un valore e poi stamparlo, come potrei fare?
sono riuscito a stampare ilo messaggio così: write(0,"inserisci valore",16);
anche se non capisco a cosa serva lo 0 passato come prim parametro, ora però il problema è usare una system call per assegnare a una variabile il valore che inserisco da tastiera.
grazie
Re: problema system call C
Inviato: mercoledì 27 maggio 2015, 13:38
da cortinico
Ciao,
Allora intanto la write deve essere fatta come primo parametro ad 1. Quello in sostanza è il file descriptor e il valore 0 sta per
standard input, l'1 per
standard output e il 2 per
standard error.
Il codice per fare quello che vuoi tu è questo:
Codice: Seleziona tutto
#include <unistd.h>
#include <string.h>
int main(void){
char buffer[50];
// Azzera la memoria in modo che non ci siano problemi quando si va a leggere del buffer
memset(buffer, '\0', 50);
write(1,"inserisci valore \n",18);
read(0,buffer, 50);
write(1,buffer, 50);
return 0;
}
Se vuoi chiarimenti chiedi pure
Re: problema system call C
Inviato: sabato 30 maggio 2015, 13:09
da gian2991
ciao, intanto grazie mille per l'aiuto, ho provato a fare alcune modifiche:
Codice: Seleziona tutto
#include <unistd.h>
#include <string.h>
void main(void){
char buffer[50];
// Azzera la memoria in modo che non ci siano problemi quando si va a leggere del buffer
//memset(buffer, '\0', 50);
int a=malloc(sizeof(int));
write(1,"inserisci valore \n",18);
read(0,a,1);
write(1,a,1);
free(a);
getchar();
getchar();
}
a me serviva un int come variabile, per non dovermelo convertire dai char, allora ho fatto cosi, da quello che ho capito l'ultimo parametro della read e della write mi dice quanti caratteri prendere in considerazione, quindi penso che così vada bene
Re: problema system call C
Inviato: sabato 30 maggio 2015, 13:37
da cortinico
In realtà non è propriamente corretto (malgrado mi pare funzioni comunque).
Infatti stai utilizzando una malloc (che torna un void *, quindi un puntatore) per assegnare il suo valore di ritorno ad un intero.
Inoltre non ho ben capito a cosa servono le getchar in fondo, ti sconsiglio di utilizzare getchar miste a systemcall (tipo le read/write), in quanto spesso le funzioni di libreria sono bufferizzate, mentre le syscall no (non mi pare getchar entri in questo insieme, comunque è sempre bene essere prevenuti).
Ti allego il codice
Codice: Seleziona tutto
#include <stdlib.h>
#include <unistd.h>
int main(void){
int * a = (int *) malloc(sizeof(int));
write(STDOUT_FILENO,"inserisci valore \n",18);
read(STDIN_FILENO, a, sizeof(int));
write(STDOUT_FILENO, a, sizeof(int));
free(a);
return 0;
}
Come vedi ho sostituito i valori numerici 1 e 0 con le macro
STDIN_FILENO e
STDOUT_FILENO, ti possono tornare più comode e rendono più leggibile il codice
Re: problema system call C
Inviato: sabato 30 maggio 2015, 20:10
da gian2991
le getchar() le ho usate perchè se no non vedevo a video i risultati, nel programma finale le toglierò, cmq grazie dei consigli, spero di venirne fuori