Append αρχείο στη C

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

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

Append αρχείο στη C

Δημοσίευσηαπό anonvuser » 21 Οκτ 2012, 08:04

Γειά σας, προσπαθώ να κάνω append ένα αρχείο και υπάρχει ένα πρόβλημα. Στο αρχείο προστίθεται το καινούριο κομμάτι αλλα στην αρχή και όχι στο τέλος που θέλω.
Κώδικας: Επιλογή όλων
fd = open(path_to_file, O_RDWR|O_CREAT|O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);

το άνοιγμα γίνεται έτσι. Γνωρίζει κανείς τι μπορεί να συμβαίνει? Να προσθέσω οτι δεν κάνω τπτ με το fseek() και τίποτα άλλα περίεργα,,,

ευχαριστώ!!! :)
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Μέτρια
Λειτουργικό =>Ubuntu 12.04 LTS σε Acer Aspire 6930G
Προδιαγραφές ⇛ Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz │ 4GB │ NVIDIA GeForce 9600M GS │Broadcom │ Samsung SyncMaster SA300 in 1920x1080
anonvuser
babeTUX
babeTUX
 
Δημοσιεύσεις: 19
Εγγραφή: 11 Οκτ 2012, 00:17
Εκτύπωση

Re: Append αρχείο στη C

Δημοσίευσηαπό evolgen » 21 Οκτ 2012, 09:28

Μεταφέρθηκε στην κατάλληλη ενότητα

Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις 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: Append αρχείο στη C

Δημοσίευσηαπό simosx » 21 Οκτ 2012, 18:48

anonvuser έγραψε:Να προσθέσω οτι δεν κάνω τπτ με το fseek() και τίποτα άλλα περίεργα,,,


Με ποια συνάρτηση γράφεις στο αρχείο;

Κάνεις fseek στο τέλος του αρχείου για να γράψεις;
προσωπικό ιστολόγιο ϗ πλανήτης 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: Append αρχείο στη C

Δημοσίευσηαπό parenthesis » 21 Οκτ 2012, 21:10

Δε νομίζω ότι υπάρχει πρόβλημα στο άνοιγμα του αρχείου.
Για παράδειγμα, το παρακάτω κομμάτι κώδικα κάνει κάθε φορά append στο τέλος του αρχείου :
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[]) {

int fd;
char buffer[10];

buffer[0] = 'b';
buffer[1] = 'l';
buffer[2] = 'a';
buffer[3] = 'h';
buffer[4] = '\n';

fd = open(path_to_file , O_RDWR|O_CREAT|O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
if (fd == -1) {
printf("File not found.\n");
return -1;
}

write(fd, buffer, 5);
close(fd);

buffer[0] = '1';
buffer[1] = '2';
buffer[2] = '3';
buffer[3] = '4';
buffer[4] = '\n';

fd = open(path_to_file , O_RDWR|O_CREAT|O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
if (fd == -1) {
printf("File not found.\n");
return -1;
}

write(fd, buffer, 5);
close(fd);
}
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: Append αρχείο στη C

Δημοσίευσηαπό anonvuser » 22 Οκτ 2012, 00:04

@simosx δεν είναι μια μόνο. έχω προσπαθήσει διάφορα όπως, write() να παίξω με τους fd αλλα τίποτα. Δεν νομίζω να είναι εκεί το πρόβλημα καθώς η εγγραφή γίνεται. απλό όχι στο σωστό σημείο.
επίσης, δεν χρειάζεται fseek γτ έχω βάλει O_APPEND(το fseek είναι "ενσωματωμένη" λειτουργία στο συγκεκριμένο flag).

@parenthesis αν υποψιαστείς οτιδήποτε πες μου. Το ξέρω είναι λίγο πολύπλοκο και ο κώδικας μου είναι μεγάλος και δεν μπορω να το δημοσιεύσω...

ΥΠ. ουσιαστική υλοποιώ ένα φλοιό -τερματικό και το χρειάζομαι για το >> που κάνει append. Παλιά δούλευε αλλα τώρα κάτι έχει αλλάξει και το χαλάει...

σας ευχαριστώ παιδιά!
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Μέτρια
Λειτουργικό =>Ubuntu 12.04 LTS σε Acer Aspire 6930G
Προδιαγραφές ⇛ Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz │ 4GB │ NVIDIA GeForce 9600M GS │Broadcom │ Samsung SyncMaster SA300 in 1920x1080
anonvuser
babeTUX
babeTUX
 
Δημοσιεύσεις: 19
Εγγραφή: 11 Οκτ 2012, 00:17
Εκτύπωση

Re: Append αρχείο στη C

Δημοσίευσηαπό simosx » 22 Οκτ 2012, 01:14

anonvuser έγραψε:Το ξέρω είναι λίγο πολύπλοκο και ο κώδικας μου είναι μεγάλος και δεν μπορω να το δημοσιεύσω...

Από το πρόγραμμά σου είναι σημαντικό να βγάλεις το σχετικό κώδικα και να τον κάνεις αυτόνομο, ώστε να μπορέσουμε να δοκιμάσουμε και να διαπιστώσουμε αν πράγματι συμπεριφέρεται έτσι.
προσωπικό ιστολόγιο ϗ πλανήτης 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
Εκτύπωση


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