[Linux] Re: linux'da C dosya işlemleri

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Bora Sahin (borasah@netone.com.tr)
Date: Mon 05 Aug 2002 - 15:28:41 EEST


SLmLar

> Uğraştığım kadarıyla başaramadım:( , fopen ile dosyayı
> açtıktan sonra bunun buffer'a yazmaya çalıştım , sonra
> basmaya çalıştığımda garip garip karakterler meydana
> geldi, kısaca beceremedim.

Belki ayni anda hem okuma hem yazma yapmaya çalistiginiz için böyle bir
sorunla karsilasmis olabilirsiniz.

> C'de dosya işlemlerinde bazı sorunlar yaşıyorum.
> Yapmak istedigim işlemler şu şekilde:
> 1. Dosya açma ve içeriğini gösterme
> 2. Dosyada bir string aramak ve değiştirmek
> (örn. httpf.conf'da bir satırın başına "#" eklenmesi
> 3. Dosya sonuna bir satır eklenmesi
>
> Bu işlemleri yapmamda yardımcı olabilir misiniz?
>
> teşekkürler
>

Ekte dosya var ama listeci kesebilir diye alta da yapistirdim. Bunlar aklima
hemen gelipte yazdigim programlarlar. Daha iyisi, esnegi, verimlisi
yazilabilir. Kabaca bazi varsayimlarda bulundum. Bu bölümleri kendi
istediginiz biçime çevirebilirsiniz.

#include <stdio.h>

#define BUFSIZE 100

#if 1

/* Dosya Sonuna Bir Satir Ekleyen Program */

int main(void)
{
 FILE *fp;
 char buf[BUFSIZE];
 char *path = "deneme.c";

 if ((fp = fopen(path, "r+")) == NULL) {
  fprintf(stderr, "Dosya Acilamiyor!\n");
  exit(1);
 }
 fseek(fp, 0, SEEK_END);
 fputs("Aliye Rona", fp);
 fclose(fp);

 return 0;
}

#endif

#if 0

/* Dosyada Belli Bir Stringi Arayip Basina # Koyan Program */

char *Insert(char *str);

int main(void)
{
 FILE *fs, *fd;
 char *pName, *pBuf;
 char buf[BUFSIZE];
 char *path = "deneme.c"; /* Su anda bulunulan dizinde böyle bir dosya
oldugunu varsaydim */

 if ((fs = fopen(path, "r")) == NULL) {
  fprintf(stderr, "Dosya Acilamiyor!\n");
  exit(1);
 }
 pName = tmpnam(NULL);
 if ((fd = fopen(pName, "w")) == NULL) {
  fprintf(stderr, "Gecici Dosya Acilamiyor!\n");
  exit(1);
 }

 while (fgets(buf, BUFSIZE, fs) != NULL)
  if (strstr(buf, "int main") != NULL) { /*int main araniyor */
   pBuf = Insert(buf);
   fputs(pBuf, fd);
  }
  else
   fputs(buf, fd);

 fcloseall();
 free(pBuf);
 remove(path);
 rename(pName, path);

 return 0;
}

char *Insert(char *str)
{
 char *tmpstr;

 if ((tmpstr = malloc((strlen(str) + 3))) == NULL) {
  fprintf(stderr, "Dinamik Tahsisat Yapilamiyor!\n");
  exit(2);
 }
 tmpstr[0] = '#';
 tmpstr[1] = ' ';
 strcpy(tmpstr + 2, str);

/*
 # Diyezden sonra bir bosluk birakir. Siz bu fonksiyonu istediginiz gibi
degistirebilirsiniz. Mesela varsayilan
olarak diyez yerlestirmemek gibi. Fonksiyonlarla ilgili "man strstr"
seklinde yardim alabilirsiniz. Bazen ayni isimde baska bir komut olabilir.
Mesela rename gibi. Bu durumda yanilmiyorsam "man 2 rename" ile fonksiyon
hakkinda bilgi alinabilir. Eger 2 degilse 8' e kadar yolu var denersiniz.
*/

 return tmpstr;
}

#endif

#if 0

/* Dosyayi Açan ve Içerigini Ekrana Yazan Program */

int main(void)
{
 FILE *fp;
 char buf[BUFSIZE];
 char *path = "/bora/socketpair.c";

 if ((fp = fopen(path, "rb")) == NULL) {
  fprintf(stderr, "Dosya Acilamiyor!\n");
  exit(1);
 }
 while (fgets(buf, BUFSIZE, fp) != NULL)
  printf("%s\n", buf);
 fclose(fp);

 return 0;
}

#endif

Bora Sahin
Saygilar

-- Binary/unsupported file stripped by Ecartis --
-- Type: application/octet-stream
-- File: FilePrcs.c

-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.