spocky Δημοσ. 19 Οκτωβρίου 2009 Δημοσ. 19 Οκτωβρίου 2009 Εχω την εξης ασκηση η οποια αφορα C και διεργασιες.Να γραφεί πρόγραμμα σε C το οποίο θα ζητάει από το χρήστη να δώσει το όνομα ενός αρχείου και έναν ακέραιο αριθμό Χ. Έπειτα θα δημιουργεί μια διεργασία-παιδί η οποία καλείται να γράψει Χ χαρακτήρες στο αρχείο αυτό και να τερματίσει. Μετά τον τερματισμό, ο πατέρας δημιουργεί μια νέα διεργασία-παιδί η οποία ζητάει εκ νέου από το χρήστη το όνομα ενός αρχείου. Ελέγχει εάν το αρχείο αυτό υπάρχει ή όχι και εφ’όσον υπάρχει ζητάει από το χρήστη την άδειά του για να το διαγράψει. Στην περίπτωση κατάφασης το διαγράφει, ενώ στην αντίθετη περίπτωση τυπώνει το μέγεθος του αρχείου και αποχαιρετάει το χρήστη με ένα μήνυμα στην οθόνη. Μπορει καποιος να με βοηθησει μιας και ειμαι ασχετος απο C για το πως θα κανω το κομματι που η διεργασια που θα φτιαξω με τη fork() θα γραψει χ χαρακτηρες στο αρχειο?
parsifal Δημοσ. 19 Οκτωβρίου 2009 Δημοσ. 19 Οκτωβρίου 2009 C File I/O and Binary File I/O Tutorial @cprogramming.com
spocky Δημοσ. 19 Οκτωβρίου 2009 Μέλος Δημοσ. 19 Οκτωβρίου 2009 Ευχαριστω για το βοηθητικο site αλλα εχω κολλησει εκει που ειναι να γραψει στο αρχειο που δημιουργει η πρωτη διεργασια.Εχω φτασει καπου εδω: /code #include <stdio.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> main() { int arithmos,newkid; int fd; int n; char onoma[100]; printf("Dwste to onoma arxeiou:\n"); scanf("%s", onoma); printf("Dwste akeraio arithmo:\n"); scanf("%d",&arithmos); newkid = fork(); fd = open(onoma, O_WRONLY | O_CREAT); n=write(fd,arithmos); close(fd) return(5); } /code Tι κανω λαθος?
pinball_elf Δημοσ. 22 Οκτωβρίου 2009 Δημοσ. 22 Οκτωβρίου 2009 > #include <stdio.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> main() { int arithmos,newkid; int fd; int n; [b]int status;[/b] char onoma[100]; printf("Dwste to onoma arxeiou:\n"); scanf("%s", onoma); printf("Dwste akeraio arithmo:\n"); scanf("%d",&arithmos); newkid = fork(); [b]if (newkid == 0) /* child process */ { int i; fd = open(onoma, O_WRONLY | O_CREAT); for (i=0;i<arithmos;i++) n=write(fd, "A",1); close(fd); return (5); } else /* parent */ { wait(&status); /* wait for child to finish first */ }[/b] Όσον αφορά το κομμάτι για την δέυτερη διεργασία, έιναι παρόμοιο με το κομμάτι για την πρώτη, χρησιμoποιώντας επιπλέον τις συναρτήσεις: fstat και remove
C6WGMN Δημοσ. 22 Οκτωβρίου 2009 Δημοσ. 22 Οκτωβρίου 2009 Αντί για fcntl μπορείς να χρησιμοποιήσεις την access.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.