• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
January 22, 2026, 00:07:11 am

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
January 22, 2026, 00:07:11 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Νέος Επίκουρος Καθηγητής:...
by sassi
[January 21, 2026, 23:53:46 pm]

[Ηλεκτρονική ΙΙ] Γενικές ...
by babistso
[January 21, 2026, 21:35:23 pm]

[Η/Μ Πεδίο ΙΙ] Γενικές απ...
by george14
[January 21, 2026, 18:16:36 pm]

ΑΝΑΚΟΙΝΩΣΗ ΤΟΥ ΑΡΑΓΕ ΓΙΑ ...
by Aris★
[January 21, 2026, 15:55:20 pm]

[ΟΔΕ] Γενικές απορίες,ασκ...
by grepanis
[January 21, 2026, 13:27:17 pm]

Νομοσχέδιο Δένδια και φοι...
by dimikotz
[January 21, 2026, 11:17:11 am]

Πολεμοσυνέδριο στο ΑΠΘ
by dimikotz
[January 21, 2026, 11:09:38 am]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by ttsengel
[January 20, 2026, 21:28:46 pm]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by NET2GRID
[January 20, 2026, 16:37:49 pm]

[Δομημένος Προγραμματισμό...
by Konlefk
[January 20, 2026, 12:32:37 pm]

Αποτελέσματα Εξεταστικής ...
by giorgosss03
[January 19, 2026, 16:18:07 pm]

Σημαντική ενημέρωση για θ...
by Nikos_313
[January 19, 2026, 15:39:05 pm]

[ΣΗΕ ΙΙ] Γενικές απορίες ...
by Nikos_313
[January 19, 2026, 00:31:24 am]

Πότε θα βγει το μάθημα; -...
by sassi
[January 18, 2026, 18:43:33 pm]

[Τηλεπικοινωνιακά Συστήμα...
by George_RT
[January 18, 2026, 17:51:34 pm]

[Ανάλυση και Σύνθεση Ραδι...
by georgiosz
[January 18, 2026, 08:46:17 am]

Νέες θέσεις εργασίας στην...
by Mr Watson
[January 16, 2026, 13:54:43 pm]

[Διανεμημένη Παραγωγή] Γε...
by george14
[January 16, 2026, 12:57:55 pm]

[Στοχαστικά Σήματα και Δι...
by georgino
[January 15, 2026, 10:29:33 am]

Απορίες σχετικά με την εξ...
by Konlefk
[January 15, 2026, 08:35:35 am]
Στατιστικά
Members
Total Members: 10327
Latest: k.zal
Stats
Total Posts: 1429886
Total Topics: 31895
Online Today: 174
Online Ever: 6054
(January 14, 2026, 06:07:19 am)
Users Online
Users: 45
Guests: 155
Total: 200
Vasilis Koudounis
bougatsa
Katerina_.
stmanzaf
pliroforikarios
chaniotism
shamaelas
AlexKyr
Tasos Bot
Giopan
christina02
MariosTsourek
sofipout
Isidora
eli_k
anastasis34
Theosarm
acolak
zille
mkakale
astakos1
marwt
chris123
Konlefk
gynekomagnitis
mimaki
dorapangeiou
kokkinosgior
spuros
sassi
jimalexoud
ttsengel
Mikekmp
tsakalokagkouras
pordozoumis
gcheristanidhs
anrkos
ZontanosThrylos
arkou
Athinaaz
evitzv
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

THMMY.gr > Forum > Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα > Περί Υπολογιστών... > Software > Προγραμματισμός (C, VB, Delphi, PHP, ASP...) > C / C++ / C# (Moderators: chatzikys, PolarBear) > Πρόγραμμα C που καλεί άλλο πρόγραμμα C
0 Members and 1 Guest are viewing this topic.
Pages: [1] 2 Go Down Print
Author Topic: Πρόγραμμα C που καλεί άλλο πρόγραμμα C  (Read 4192 times)
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« on: March 17, 2008, 12:42:16 pm »

Έχω δύο αρχεία .c, ας πούμε το parent.c και το child.c, και θέλω όταν τρέχω το parent κάποια στιγμή να εκτελεί ως "υπορουτίνα" το child (μεταφέρει στο child την εκτέλεση και το child κάνει exit στο parent). Νομίζω ότι αυτό γίνεται με τις συναρτήσεις spawn. Έλα όμως που κάθε φορά που πάω να το εκτελέσω το εκτελώ κανονικά! Συγκεκριμένα μου βγάζει κωδικό λάθους errno=ENOMEM, δηλ. σύμφωνα με τους οδηγούς μου "Not enough core".

Μήπως δίνω λάθος arguments στο child; Μήπως είναι πρόβλημα λειτουργικού; Τι μπορεί να προκαλεί αυτό το σφάλμα; Το child από μόνο του λειτουργεί κανονικά, και το parent βρίσκει το αρχείο στο current directory.

Χρησιμοποιώ τη spawnl. Συγκεκριμένα, του δίνω κάτι σα spawnl(P_WAIT,"CHILD.C","hello",NULL); και το child έχει σαν arguments είτε (int n, char *ch) είτε (char *ch) [έχω δοκιμάσει και τα δύο].
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #1 on: March 17, 2008, 12:52:20 pm »

fork() anyone? Αυτό είναι το σωστό system call για να δημιουργεις child proccesses....

Δεν μπορώ να σου τπτ αλλο από το

%man fork

και τπτ online documentation Smiley
Να σου πω την αληθεια δεν την ηξερα τη spawn, αλλά ο κλασσικός low-lvl τρόπος είναι η fork() ...

Α και το child.c δε μου φαίνεται για πρόγραμμα αλλά απλως για ένα αρχείο κειμένου if u know what I mean Wink
Δλδ εκτός και αν αποθήκευσες το εκτελέσιμο ως child.c, το βρίσκω τελείως απίθανο η spawnl να παίρνει αρχείο κειμένο ως argument...
« Last Edit: March 17, 2008, 13:09:48 pm by Nh » Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #2 on: March 17, 2008, 23:21:04 pm »

Δε γίνεται να συμβουλεύομαι online documentation για τεχνικούς λόγους (δες άλλο thread Embarrassed)...

Τώρα κατάλαβα πώς λειτουργεί το πράγμα... πρέπει το parent με κάποιον τρόπο να κάνει πρώτα compile το child και μετά να το καλέσει. Πώς καλώ το αντίστοιχο πρόγραμμα (tcc) κολλώντας δίπλα το "child.c";
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #3 on: March 18, 2008, 00:06:09 am »

Με τα variants του exec:

Code:
#include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...);
       int execlp(const char *file, const char *arg, ...);
       int execle(const char *path, const char *arg,
                  ..., char * const envp[]);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);

μπορεις να τρεξεις όποιο πρόγραμμα θες. Απλά πρέπει πρώτα να χρησιμοποιήσεις τη fork(), γιατί η execl() δε δημιουργει ενα child proccess. αλλά  κανει replace την υπαρχουσα proccess. Αρα μετά το system call, θα αγνοηθει οποιοσδηποτε κώδικας από κάτω από την execl() αφού η proccess τερματίζεται...

Δες λίγο πως δουλεύω εγώ με μια child proccess στο linux:

Code:
#include <stdio.h>
#include <unistd.h>

int main (void) {
pid_t pid;
int s = 5;
pid = fork();
if (pid > 0) {
//Eimaste sth child
                execlp ("ls" , "ls" , "-al" , (char*)0);
} else if (pid == 0) {
//Eimaste sth parent
printf("Why hello there\n");
}
fprintf(stdout, "s is %d\n", s);
}

Θα σου φαίνεται περίεργο...
Εδώ με τη fork δημιουργω μια process με ενα συγκεκριμενο pid, και σχεδον simultaneously εκετελούνται και στη parent κ sth child αυτά που είναι μέσα στα if ...

Ουσιαστικά , με τη fork(), όλος ο υπόλοιπος κώδικας θα εκτελεστεί σε 2 proccesses, η αρχική και η άλλη που δημιουργήθηκε από τη fork(). Το κόλπο είναι σε μιά από τις 2  να εκτελέσεις το εξωτερικό πρόγραμμα με τη execl, και μετά αφού θα γίνει αυτό που θες, η μια proccess θα τερματιστεί (έτσι δουλεύει η execl)  και ο υπόλοιπος κώδικας θα εκτελεστεί κανονικά! Αν δεν το κάνεις αυτό, το παρακάτω θα σε διαφωτίσει...

Code:
#include <stdio.h>
#include <unistd.h>


int main (void) {
int s = 5;
execlp ("ls" , "ls" , "-al" , (char*)0);
fprintf(stdout, "s is %d\n", s);
}

το τελευταίο fprintf θα αγνοηθεί...
Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #4 on: March 18, 2008, 00:27:47 am »

Δεν καταλαβαίνω Embarrassed

Ο κώδικας της pid πού είναι;
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #5 on: March 18, 2008, 00:34:56 am »

Κάτι αρχίζω να πιάνω...
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #6 on: March 18, 2008, 00:44:56 am »

Από τη στιγμή που κάνεις fork() , δημιουργειται μια νεα process με ομοια στοιχεία με την 'parent' (που δεν είναι εντελως parent). Ότι κάνει παρακάτω το πρόγραμμα εκτελείται ΚΑΙ ΣΤΙΣ ΔΥΟ. Η μόνη διαφορά ανάμεσα σε parent κ child ειναι το pid που επέστρεψε η fork κατα την ανάθεση... H parent έχει 0 και η child έναν θετικό αριθμό. Οτιδήποτε άλλο υπάρχει όμοια και στις δύο processes (μεταβλητές, συναρτήσεις, σταθερές). Άρα με μια if condition μπορεις να ελέγξεις αποκλειστικά τι γίνεται στη parent ή στη child! Στο παράδειγμα μου, h execl , που εκτελείται μόνο στη 'child' , αντικαθιστα την process την οποία την καλεί (th child) κάνει ότι είναι να κάνει κ μετά τερματίζεται. Άρα κανονικά συνεχίζεται η ροή του προγραμματος. μετά το if...

Αυτό που δεν έχω καταλάβει είναι τι ακριβώς θες να κάνεις... άμα θες να κάνεις include απλά τον κώδικα δεν έχουν καμία σχέση τα από πάνω. 'Πρόγραμμα που καλεί άλλο πρόγραμμα C' είναι ο τίτλος του topic... άρα φαντάζομαι πως απλώς θες να εκτελεσθεί κάτι επιπλέον στο κυρίως πρόγραμμα σου. Τα παραπάνω σε καλύπτουν και παρόλο που πρέπει να σου φαίνονται περίεργα, σε fork() exec κ pipe() έχουν βασιστεί τα UNIX λειτουργικά...

Φαντάζομαι θα έχεις απορίες και δεν έιμαι ακόμα σε ικανό επίπεδο στο system programming (γιατί αυτό κανεις) για να σε καλύψω στα σίγουρα.
Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #7 on: March 18, 2008, 01:58:44 am »

Δεν ξέρω, ίσως να το έχω πάρει από την αρχή τελείως λάθος... Εκτελώ ένα πρόγραμμα. Έχω ένα αρχείο .c το οποίο τροποποιείται από το πρόγραμμα εκείνη την ώρα. Αφού τροποποιήσω και κλείσω το αρχείο αυτό, θέλω κάποια στιγμή το πρόγραμμα να το εκτελέσει.

Κάπου στην πορεία συνειδητοποίησα ότι πρέπει να είναι πρώτα εκτελέσιμο το αρχείο για να το εκτελέσει (είπαμε είμαι άσχετη Tongue), οπότε πρέπει το πρόγραμμα να κάνει και compile. Αυτό όμως είναι πάλι το ίδιο πρόβλημα, αφού πρέπει μέσω του προγράμματος να εκτελέσω το tcc.exe με όρισμα το αρχείο που θέλω.
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #8 on: March 18, 2008, 21:41:33 pm »

Α-χουμ...

Εκτελώ g=spawnl(P_WAIT,"TCC.EXE","SYNART.C",NULL);

Ο κωδικός λάθους που μου βγάζει είναι Not enough core.

Γιατί δε με θέλει η C; Sad
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #9 on: March 18, 2008, 21:59:42 pm »

Μα γιατί τέτοιο κόλλημα με τη spawnl... Από όσο ξέρω δεν είναι standard function  Undecided

και νομίζω πρέπει να βάλεις και full path name εκει στο tcc.exe Wink

btw καλα σκέφτεσαι ...
« Last Edit: March 18, 2008, 22:27:36 pm by Nh » Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #10 on: March 18, 2008, 23:59:25 pm »

Μπα, το αρχείο το βρίσκει, αλλιώς η errno θα μου έδινε File not found. Κάτι με την αναμονή ίσως να παίζει...

BTW και με την exec έχω τα ίδια αποτελέσματα... τον προγραμματισμό μου μέσα Undecided Undecided Undecided
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #11 on: March 28, 2008, 13:58:24 pm »

Ρε παιδιά θα τρελαθώ... δε δουλεύει ούτε η system! Για την ακρίβεια, έκανα copy-paste το παράδειγμα από το Help όπου χρησιμοποιούσε τη system για να καλέσει τη dir και να σου βγάλει κατάλογο αρχείων, και πάλι όταν πάω να το εκτελέσω μου λέει ότι δεν έχει αρκετή μνήμη! Copy-paste από το παράδειγμα ακριβώς είχα κάνει bang_head
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #12 on: March 28, 2008, 14:00:49 pm »

Ποιον compiler έχεις??
Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
BOBoMASTORAS
Veteran
Καταστραμμένος
******
Posts: 6082


It just doesn't get any easier! It gets worse...


View Profile
deleted
« Reply #13 on: March 28, 2008, 15:07:53 pm »

deleted
« Last Edit: June 14, 2015, 18:41:11 pm by BOBoMASTORAS » Logged

Της γενιάς μου βασιλιά,
μην κατέβεις τα σκαλιά.
Πιες αθάνατο νερό
να νικήσεις τον καιρό.

http://tools.ietf.org/html/rfc1149
The only reason we invent robots
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


Ιούνιος 1999 - 19/7/2009


View Profile
Re: Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« Reply #14 on: March 28, 2008, 15:57:15 pm »

Οτιδήποτε από τα δύο μου κάνει.
Logged

Διεθνιστική Εργατική Αριστερά
Διεθνιστική Αριστερά
Εργατική Αριστερά
RedNet Θεσσαλονίκης
Pages: [1] 2 Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...