• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 18, 2025, 19:30:23 pm

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.
June 18, 2025, 19:30:23 pm

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
[ΣΗΕ ΙΙ] Γενικές απορίες ...
by chatzikys
[Today at 19:26:00]

Σιδηροδρομικό Δυστύχημα σ...
by Katarameno
[Today at 18:22:39]

Ισραήλ - Ιράν: Πόλεμος στ...
by okan
[Today at 18:22:08]

H Στοά των Off Topic
by Nikos_313
[Today at 08:53:31]

[Μεταφορά και Διανομή ΗΕ]...
by tzortzis
[Today at 07:55:05]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by chris_p30
[Today at 00:45:33]

[Ψηφιακά Ολοκληρωμένα Κυκ...
by tzortzis
[June 17, 2025, 21:25:42 pm]

[Εφ.Θερμοδυναμική] Γενικέ...
by PAPARI69
[June 17, 2025, 20:59:13 pm]

[Γραφική] Λυμένα θέματα
by okanpala
[June 17, 2025, 18:56:22 pm]

Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[June 17, 2025, 14:25:00 pm]

Αντικατάστασης πυκνωτή σε...
by george14
[June 17, 2025, 13:58:20 pm]

Πότε θα βγει το μάθημα; -...
by tzortzis
[June 17, 2025, 13:19:53 pm]

Αποτελέσματα Εξεταστικής ...
by george14
[June 17, 2025, 12:08:25 pm]

[ΨEE] Γενικές απορίες και...
by Juror8
[June 17, 2025, 12:06:57 pm]

[Οργάνωση Υπολογιστών] Γε...
by RAFI
[June 16, 2025, 22:46:54 pm]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[June 16, 2025, 19:49:00 pm]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[June 16, 2025, 16:56:56 pm]

[Αρχές Οικονομίας] Να επι...
by _Trob
[June 16, 2025, 13:28:21 pm]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[June 16, 2025, 12:13:45 pm]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[June 16, 2025, 01:56:37 am]
Στατιστικά
Members
Total Members: 9965
Latest: Poli
Stats
Total Posts: 1426720
Total Topics: 31711
Online Today: 242
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 79
Guests: 175
Total: 254
m.renia
prigians
chaniotism
marios2912
dkatsoul
nick_slendy
jimalexoud
johnk
theodoradr
mayia psarikoglou
vasilis saitis
sofaki
vaggelis.ntokas
Billyskotsikas
ariadnipm
ioannisdamantis
tzortzis
andreassifo
thanosk
dimitris papadopoulos
iakov
chatzikys
Farmengineer
Nikos_313
George_RT
κοτζακ
rafa98p
Napoleontas
andripappa
tasos gourd
kmarkad
Summand
kutsukellis
chrysa.tsilika
George15
alexandraskol
dionmant
christina02
acapulco
Captain
xdallas
thomaitheodosiadou
DimGeo
tpt
Βασιλης
Fenia04
Denisivo
Tasaras
mimaki
PolarBear
chriskazakos
adaskopo
fpapat
vasilikitsatsi
noimaginationforthis
Antonis Mak
Roidos
alexlabis
andrkott
JTS
apob
koystravasvasilis
thegreekbaron
andreaspaper
thomasdt
stavros0201
kmargaritis
jojos
Marihouan820
Giannis Masterio
Εμφάνιση

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

Νέα!
Πρόγραμμα Χειμερινής Εξεταστικής 2024-2025
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 3451 times)
Nessa NetMonster
Καταστραμμένος
********
Posts: 7044


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


View Profile
Πρόγραμμα C που καλεί άλλο πρόγραμμα C
« on: March 17, 2008, 13: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, 13: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, 14: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 18, 2008, 00:21:04 am »

Δε γίνεται να συμβουλεύομαι 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, 01: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, 01: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, 01: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, 01: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, 02: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, 22: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, 22:59:42 pm »

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

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

btw καλα σκέφτεσαι ...
« Last Edit: March 18, 2008, 23: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 19, 2008, 00:59:25 am »

Μπα, το αρχείο το βρίσκει, αλλιώς η 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, 14: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, 15: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, 16:07:53 pm »

deleted
« Last Edit: June 14, 2015, 19: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, 16: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...