problema system call C
problema system call C
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
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
- cortinico
- Scoppiettante Seguace

- Messaggi: 477
- Iscrizione: venerdì 15 maggio 2015, 16:49
- Desktop: Unity
- Distribuzione: Ubuntu 15.04 amd64
- Sesso: Maschile
- Località: Pisa
- Contatti:
Re: problema system call C
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:
Se vuoi chiarimenti chiedi pure
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;
}
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
http://ncorti.com
Re: problema system call C
ciao, intanto grazie mille per l'aiuto, ho provato a fare alcune modifiche:
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
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();
}- cortinico
- Scoppiettante Seguace

- Messaggi: 477
- Iscrizione: venerdì 15 maggio 2015, 16:49
- Desktop: Unity
- Distribuzione: Ubuntu 15.04 amd64
- Sesso: Maschile
- Località: Pisa
- Contatti:
Re: problema system call C
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
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
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;
}
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
http://ncorti.com
Re: problema system call C
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
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti