Oké, ez nagyon amatőr kérdés, belátom, és valszleg tíz perc forrásböngészéssel meg tudnám válaszolni, de az utókor okulására álljon itt:
Hogyan kell egy file-t megnyitni, és a végéhez írni valamit?
w
- 6685 megtekintés
Hozzászólások
echo "blabla" >> filename
- A hozzászóláshoz be kell jelentkezni
vagy
cat >> fileneve
>ide azt írsz amit akarsz
>
majd ctrl-C kilép
üdv: pomm
- A hozzászóláshoz be kell jelentkezni
A jószándékot köszönöm, a figyelmetlenségért viszont ejnyebejnye. ENNYIRE azért ne offoljunk :)
w
- A hozzászóláshoz be kell jelentkezni
off
sorry, nem néztem a fórumot :)
Ma már annyi blődséggel találkozik az ember, hogy válaszol rá...régebben jobban megnéztem volna :) Hiába, hígulnak a linux felhasználók is... :)
off end
üdv: pomm
- A hozzászóláshoz be kell jelentkezni
#include "fileio.ch"
function main()
local fd
? fd:=fopen("append.prg",FO_READWRITE)
? fseek(fd,0,FS_END)
? fwrite(fd, "//megjegyzés"+chr(10) )
?
//megjegyzés
--
CCC3
- A hozzászóláshoz be kell jelentkezni
Felhívnám a figyelmet egy nüansznyi különbségre az "írásra megnyitás és végére tekerés", valamint a "hozzáfűzésre megnyitás" között. Ha egyedül te írod a fájlt, akkor a két megoldás azonos. Ha azonban többen is írják, akkor már nem. Előbbi esetben lehet, hogy úgy adódik a két progi futása, hogy először mindketten a fájl végére tekernek, és utána mindketten arra a pozícióra kezdik el írni az adatokat, a későbbi felülírva a korábbi által odaírtat. Ha viszont hozzáfűzésre nyitod meg a fájlt, akkor minden írási művelet automatikusan a fájl végére történik (kivéve NFS fájlrendszeren), tehát a két progi üzenete valamilyen sorrendben egymás után fog megjelenni a fájlban.
- A hozzászóláshoz be kell jelentkezni
Ez a fajta O_APPEND nincs a CCC-s fopen()-ben. Gondolkozom rajta, nem kell-e pótolni.
--
CCC3
- A hozzászóláshoz be kell jelentkezni
Hát ezen nem kellett sokat gondolkozni. Megvan az FO_APPEND opció.
#include "fileio.ch"
function main(x)
local fd,n
fd:=fopen("app.txt",FO_READWRITE+FO_CREATE/*+FO_APPEND*/)
//fd:=fcreate("app.txt",FC_NOTRUNC+FC_APPEND)
for n:=1 to 100
fseek(fd,0,FS_END)
sleep(1) //1 millisec
fwrite(fd, replicate(x,9)+chr(10) )
sleep(1)
next
A teszt abból áll, hogy ezt a programot gyors egymásutánban 2x elindítom, és nézem az eredményt FO_APPEND-del és anélkül. Append módban nem szabad elvesznie kimenetnek. FO_APPEND nélkül a felülírások miatt a kimenet rövidebb. UNIX-on ez 100%-osan így van, winen viszont néha append módban is történik egy-két felülírás:( Winen egyetlen sopen() történik, világosan látszik, hogy érti az O_APPEND-et, de néha mégis hibázik. Ez a win (vagy a C könyvtár) "sajátossága", nem tudok vele mit kezdeni.
--
CCC3
- A hozzászóláshoz be kell jelentkezni
set alternate to ("file") additive
set alternate on
Ezek az ősi Clipper utasítások megnyitják a filét append módban, a qout/qqout (vagy ?/??) tud írni bele. Emögött POSIX stream (fprintf) van, míg a CCC fopen mögött a POSIX file descriptor (read/write).
--
CCC3
Bocs, nem "append", hanem "additive".
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget, egyelőre maradtam az első megfejtésnél, de tanulságos a set alternative to... is.
w
- A hozzászóláshoz be kell jelentkezni