Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό pc_magas » 18 Νοέμ 2013, 20:14

bbabis01 έγραψε:Γράφω προγραμματάκι στη c που θα τρέχει μέσω terminal του linux.. και θέλω όταν δίνει ο χρήστης την είσοδο "exit" να τερματίζει και η κονσόλα του terminal..

Έμα γράψω σκέτο exit(0) κλείνει το πρόγραμμά μου αλλά το terminal φυσικά συνεχίζει και είναι ανοικτό.. Πως μπορώ να το κλείνω και αυτό;

  • system("kill -9 $$");
  • system("sudo killall gnome-terminal");
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2593
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό evolgen » 18 Νοέμ 2013, 21:45

pc_magas έγραψε:
  • system("sudo killall gnome-terminal");

Δύο προβλήματα με αυτό που έγραψες:

1. Η εντολή θα σκοτώσει όλα τα gnome-terminals που είναι ανοιχτά εκείνη τη στιγμή, τα οποία μπορεί να τρέχουν κάτι άλλο και πιθανόν σημαντικό!
2. Δεν είναι απαραίτητο ότι ο χρήστης τρέχει την εφαρμογή με gnome-terminal. Μπορεί να χρησιμοποιεί konsole, xterm ή κάτι άλλο.
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό simosx » 19 Νοέμ 2013, 00:38

simosx έγραψε:Μπορείς να βρεις την ταυτότητα της διεργασίας (Process ID) του τερματικού, και μετά να την τερματίσεις (kill).
Θα είναι η γονική διεργασία της εφαρμογής που έγραψες.


Και αυτό γίνεται κατά π.χ.
https://gist.github.com/simos/7535778
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό g1wrg0s » 25 Νοέμ 2013, 23:40

θυμαμαι ειναι ενα συχνο προβλημα οταν γραφω κοδικα σε C αλλα δε θυμαμαι με ποιο τροπο λυνεται αποτελεσματικα. Τι εννοω; ελγχος του τυπου εισοδου απο το χρηστη.

Θελω το argv[1] να ειναι integer. Μεχρι τωρα εχω προσπαθησει με sscanf και ειδα και isdigit αλλα δεν εχω βρει ακρη. Eχετε κατι υποψη σας που μπορει να βοηθησει ;
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Πρώτα βήματα
2 Ubuntu 12.10 quantal 3.10.20-031020-generic 32bit (el_GR.UTF-8, Unity ubuntu), Windows 8
3 Intel Core i5-3230M CPU @ 2.60GHz ‖ RAM 7923 MiB ‖ Acer VA50_HC_CR - Acer Aspire V3-571G
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915} ⋮ nVidia Device [10de:0fe1] {}
5 eth0: Broadcom NetLink BCM57785 Gigabit Ethernet PCIe [14e4:16b5] (rev 10) ⋮ wlan0: Atheros Inc. AR9462 Wireless Network Adapter [168c:0034] (rev 01)
g1wrg0s
punkTUX
punkTUX
 
Δημοσιεύσεις: 196
Εγγραφή: 26 Μάιος 2012, 10:29
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό pc_magas » 26 Νοέμ 2013, 22:05

g1wrg0s έγραψε:θυμαμαι ειναι ενα συχνο προβλημα οταν γραφω κοδικα σε C αλλα δε θυμαμαι με ποιο τροπο λυνεται αποτελεσματικα. Τι εννοω; ελγχος του τυπου εισοδου απο το χρηστη.

Θελω το argv[1] να ειναι integer. Μεχρι τωρα εχω προσπαθησει με sscanf και ειδα και isdigit αλλα δεν εχω βρει ακρη. Eχετε κατι υποψη σας που μπορει να βοηθησει ;

  1. strtol( argc[1], NULL, 10 )
  2. http://stackoverflow.com/questions/9753346/determine-if-a-c-string-is-a-valid-int-in-c
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2593
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 15 Νοέμ 2014, 17:13

Κώδικας: Επιλογή όλων
#include<stdio.h>
#define MAX_ROWS 26
#define MAX_COLS 26

int main(void)
{
   char tabula_recta[MAX_ROWS][MAX_COLS];
   int pos , row , col;
   
   for( row=0; row < MAX_ROWS; row++){
      pos = 0;
      for( col=0; col < MAX_COLS; col++){
         if('A'+row+col > 'Z' && row > 0){
            tabula_recta[row][col] = 'A'+ pos;
            pos++;
         }
      else if('A' + row + col == 'Z')
         tabula_recta[row][col] = 'Z';
      else
         tabula_recta[row][col] = 'A'+row+col;
      }
   }
   
   puts("Printing tabula recta table...");
   
   for( row=0; row<MAX_ROWS; row++) {
      printf("\n");
      for( col=0; col<MAX_COLS; col++){
            printf("%c" , tabula_recta[row][col]);
      }
   }

return 0;
}


Αυτο ειναι μια υλοποιηση του Tabula recta* για τον κρυπταλγοριθμο του Vigenere , σκέφτομαι να την χρησιμοποιήσω οταν βρω χρονο για να υλοποιήσω το προγραμμα της κρυπτογραφησης. Σχολιασμοί - επισημάνσεις και διορθωσεις ευπρόσδεκτα.

@migf1 εισαι ακομα εδώ?

και στο ideone :

http://ideone.com/iMOTMj

* http://en.wikipedia.org/wiki/Tabula_recta
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2783
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό konnn » 15 Νοέμ 2014, 17:44

Star_Light έγραψε:
Κώδικας: Επιλογή όλων
#include<stdio.h>
#define MAX_ROWS 26
#define MAX_COLS 26

int main(void)
{
   char tabula_recta[MAX_ROWS][MAX_COLS];
   int pos , row , col;
   
   for( row=0; row < MAX_ROWS; row++){
      pos = 0;
      for( col=0; col < MAX_COLS; col++){
         if('A'+row+col > 'Z' && row > 0){
            tabula_recta[row][col] = 'A'+ pos;
            pos++;
         }
      else if('A' + row + col == 'Z')
         tabula_recta[row][col] = 'Z';
      else
         tabula_recta[row][col] = 'A'+row+col;
      }
   }
   
   puts("Printing tabula recta table...");
   
   for( row=0; row<MAX_ROWS; row++) {
      printf("\n");
      for( col=0; col<MAX_COLS; col++){
            printf("%c" , tabula_recta[row][col]);
      }
   }

return 0;
}


Αυτο ειναι μια υλοποιηση του Tabula recta* για τον κρυπταλγοριθμο του Vigenere , σκέφτομαι να την χρησιμοποιήσω οταν βρω χρονο για να υλοποιήσω το προγραμμα της κρυπτογραφησης. Σχολιασμοί - επισημάνσεις και διορθωσεις ευπρόσδεκτα.

@migf1 εισαι ακομα εδώ?

και στο ideone :

http://ideone.com/iMOTMj

* http://en.wikipedia.org/wiki/Tabula_recta


Εγώ θα υλοποιήσω την μέθοδο kasiski και ενδέχεται να χρησιμοποιήσω το κωδικά σου, αν χρειαστεί κάπου.Δε σε πειράζει;
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3566
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 15 Νοέμ 2014, 18:37

Oχι τι προβλημα να έχω ισα ισα εσυ μου το είπες κιολας. Απλα ειπα να το δημοσιευσω να το συζητησουμε. Μηπως μου έχει ξεφυγει κάτι ή παιζει πουθενα κανενα UB ή θεματα portability.

EDIT: Βασικά ειδα τι ειχε κάνει και ο migf1 τις προάλλες http://ideone.com/SvFRR .Ο δικος μου πινακας ειναι στατικος και δεν ξέρω τι συμπεριφορα θα έχει το προγραμμα αμα συναντήσει σε κάποιο μηχανημα σετ χαρακτηρων που δεν έχουν συνεχομενους κωδικους παντως και σε ASCII και σε Unicode συνεχομενοι ειναι οι κωδικοι. Η αρχικοποιηση ωστοστο δεν έγινε hard-coced οπως την ειχε φτιάξει ο pc_magas στο νήμα της Java.

Ο συγκεκριμενος κώδικας κάνει την υποθεση οτι αν ο Α έχει τον κώδικο 0 τοτε ο Ζ θα έχει τον 25. Για τους πραγματικούς κωδικους των χαρακτηρων μπορει κάποιος να δει το ASCII set.
Τελευταία επεξεργασία από Star_Light και 16 Νοέμ 2014, 17:24, έχει επεξεργασθεί 1 φορά/ες συνολικά
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2783
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 16 Νοέμ 2014, 14:39

Κώδικας: Επιλογή όλων
  else if('A' + row + col == 'Z')
         tabula_recta[row][col] = 'Z';


αυτο δεν χρειάζεται.

Παντως αν θελησει κάποιος να το χρησιμοποιήσει ειναι πολύ απλούστερο απο εκεινο του migf1 εννοειται αλλα έχει θέματα φορητότητας και λαμβανει υποψιν μονο το λατινικο αλφάβητο. Ειναι δεσμευμενο δηλαδη απο αυτο με οτι αυτο μπορει να συνεπάγεται.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2783
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 21 Νοέμ 2014, 21:15

Star_Light έγραψε:[code]
...
@migf1 εισαι ακομα εδώ?
...


Εδώ είμαι, αλλά δυστυχώς όχι με τη συχνότητα που θα ήθελα (είμαι λίγο πηγμένος αυτό το διάστημα).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι