fstab dosyası işleme // C

Başlatan sem, 30 Haziran 2010 - 04:05:52

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sem

Aklıma gelen şeyleri kontrol ettim, unttuğum olmuşsa, fark eden olursa düzeltirim. fstab dosyasına işleme programıdır. Arda'nın (agritux) SUDO 20. sayıda anlattığı işlemi uygular. ntfs için Arda'nın Windows için tavsiye ettiği ayarları yapar. ext2,ext3,ext4 için yine Linux için tavsiye edilen ayarı yapar. swap için ise bir işlem yapmaz. Çalışma esnasında bir problem ile karşılaşırsanız;
sudo nano /etc/fstab dosyası içindeki son değişiklieri silin.

Bir hata geri bildirimi olursa düzeltiriz demiştim, tekrarda hatırlatayım... İkişer işletim sistemi kullanılan iki bilgisayarda denendi. Birisinde Ubuntu-Windows, diğerinde Ubuntu-Arch vardı. Herhangi bir sorun yaşamadım... Fakat hata için ne olur ne olmaz diye diyorum...
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


void ara (char taranacak[150], char aranan[10], char donus[50]);


int main()
{
   int k,i,secim;
   char enter,secim2,ch;
   FILE *gecici, *fstab;
   char TYPE[10];
   char UUID[50];
   char BLM_ADI[15];
   char typeara[] = "TYPE=\"";
   char uuidara[] = "UUID=\"";
   char taranacak[150];
   char baglama_noktasi[15];
   char bn_komutu[50];
   char bn_izni[50];
   char win_bag[200], lin_bag[200];
   char kullanici[20];
   while(1)
   {
      fprintf(stdout,"baglama noktasi girin (mount point): ");
      fscanf(stdin,"%s",baglama_noktasi);
      if(access(baglama_noktasi,0) == 0)
      {
evethayir:
         fprintf(stdout,"%s -->Dosya zaten mevcut, üzerinde işlem yapılsın mı?[e/h]:",baglama_noktasi);
         while ((ch = getchar()) != '\n' && ch != EOF);
         fscanf(stdin,"%c",&secim2);
         if(!isalpha(secim2))
         {
            fprintf(stdout,"e ya da h tuşlarından birisine basın...\n");
            goto evethayir;
         }
         else
         {
            if(secim2 == 'h')
            {
               continue;
            }
            if(secim2 == 'e')
            {
               sprintf(bn_komutu,"sudo mkdir %s",baglama_noktasi);
               break;
            }
            else
            {
               fprintf(stdout,"e ya da h tuşlarından birisine basın...\n");
                goto evethayir;
            }
         }


      }
      else
      {
         sprintf(bn_komutu,"sudo mkdir %s",baglama_noktasi);
         system(bn_komutu);
         if(access(baglama_noktasi,0) != 0)
            continue;
         else
            break;
      }
   }


   system("sudo blkid > gecici");
   if((gecici = fopen("gecici","r+t")) == NULL)
   {
      fprintf(stdout,"Dosya olusturulamadı...\n");
      perror("fopen");
      exit(EXIT_FAILURE);
   }
   else
   {
      for(i = 0;!feof(gecici);)
      {
         enter = fgetc(gecici);
         if(enter == '\n')
         {
            ++i;
         }
      }
      rewind(gecici);
      system("clear");
      fprintf(stdout,"1. Bolum:\n");
      for(k = 2;;)
      {
         enter = fgetc(gecici);
         fprintf(stdout,"%c",enter);
         if(enter == '\n')
         {
            if(k == i+1) break;
            fprintf(stdout,"\n%d. Bolum:\n",k);
            ++k;
         }

      }

   }
   rewind(gecici);
digit:
   secim = -5000;
   fprintf(stdout,"Hangi bolumde degisiklik yapmak istiyorsaniz kodunu girin:");
   while ((ch = getchar()) != '\n' && ch != EOF);
   fscanf(stdin,"%d",&secim);
   if(secim == -5000)
   {
      fprintf(stdout,"Bir sayi girmelisiniz.\n");
      goto digit;
   }
   if(secim < 1 || secim > i)
   {
      fprintf(stdout,"Girdiginiz deger [1 - %d] araliginde olmalidir.%d girdiniz\n",i,secim);
      goto digit;
   }
   --secim;
   for(k = 0;;)
   {
      enter = fgetc(gecici);
      if(enter == '\n') ++k;
      if(k == secim)
      {
         fgets(taranacak,150,gecici);
         k = strlen(taranacak);
         taranacak[k -1] = '\0';
         break;
      }
   }
   remove("gecici");
/////////////////////////////////////////////////////////////////////////////////////////////////////
   sscanf(taranacak,"%s",BLM_ADI);
   k = strlen(BLM_ADI);
   BLM_ADI[k - 1] = '\0';
   ara(taranacak,typeara,TYPE);
   ara(taranacak,uuidara,UUID);
   system("clear");

   system("sudo chmod 777 /etc/fstab");
   if((fstab = fopen("/etc/fstab","a+t")) == NULL)
   {
      fprintf(stdout,"fstab dosyası acilamadi...\n");
      perror("fopen");
      exit(EXIT_FAILURE);
   }

   if(!strcmp(TYPE,"ntfs"))
   {
     sprintf(win_bag,"\n\n#%s  ---   %s\nUUID=%s %s    %s    defaults,nls=utf8,umask=007,gid=46     0        0",BLM_ADI,baglama_noktasi,UUID,baglama_noktasi,TYPE);
     fprintf(fstab,"%s",win_bag);
     goto bitis;
   }
   if(!strcmp(TYPE,"ext2") ||  !strcmp(TYPE,"ext3") ||  !strcmp(TYPE,"ext4"))
   {
     sprintf(lin_bag,"\n\n#%s  ---   %s\nUUID=%s %s    %s    defaults     0        2",BLM_ADI,baglama_noktasi,UUID,baglama_noktasi,TYPE);
     fprintf(fstab,"%s",lin_bag);
     goto bitis;
   }
   if(!strcmp(TYPE,"swap"))
   {
      fprintf(stdout,"swap bölümünü fstab dosyasına işlemenize gerek yoktur...\n");
      goto bitis;
   }
   else
   {
      fprintf(stdout,"Bilinmedik format\n");
   }
bitis:
   system("whoami > gecici");
   if((gecici = fopen("gecici","r")) == NULL)
   {
      fprintf(stdout,"Dosya açımında hata...\n");
      perror("fopen");
      exit(EXIT_FAILURE);
   }
   else
   {
      fscanf(gecici,"%s",kullanici);
      fclose(gecici);
      remove("gecici");
   }
   sprintf(bn_izni,"sudo chown -R %s %s",kullanici,baglama_noktasi);
   system(bn_izni);
return 0;
}


void ara (char taranacak[150], char aranan[10], char donus[50])
{
   int k,i,j,l,a;
   k = strlen(aranan);
   char okunan[k];

   l = 2;
   j = 1;
sonrakiaranan:

         for(i = 0; i != k;)
         {

            if(aranan[i] == taranacak[j])
            {
               ++i;
               ++j;
            }
            else
            {
               i = 0;
               j =l;
               ++l;
            }
          }
          if(taranacak[j-k-1] != ' ' )
          goto sonrakiaranan;
   a = l + k-1;
   for(j = 0;;++j,++a)
   {
      donus[j] = taranacak[a];
      if(taranacak[a] == '"')
      {
         donus[j] = '\0';
         break;
      }
   }

}




EK: Kodu çalıştırabilemek için yapacaklarınızı hatırlatma: Dosyayı yazma izniniz olan bir dizine fstab.c diye kaydedin. Sonra terminalden, fstab.c dosyasını kaydettiğiniz dizine gelerek (cd komutu ile) terminale;
gcc fstab.c -o fstabprogramı
komutunu verin. Sonra programı çalıştırmak için aynı dizinde
./fstabprogramı
Dediğinizde çalışacaktır.
NOT:Burada fstab.c örnektir istediğiniz ismi verebilirsiniz. "fstabprogramı" da örnektir, bunu da dilediğiniz isim ile kullanabilirsiniz...


".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hitokiri

heim hayırlı olsun , eline sağlık :)

ironic

@sem, burdan da teşekkür edeyim. Eline sağlık

bytan

Eline sağlık @sem0900. Son zamanlardaki çalışmaların bu bölüme de sıçradığını görmek sevindirici. Umarım domino etkisiyle yayılıp örnekler/çalışmalar artar.
Umut en büyük kötülüktür; işkenceyi uzatır. - F.N.


Bir şey ne ise odur, bu kadar. Öyleyse, iki şey arasında bağdaşıklık varsa, bu aralarında iletişim kuruyorlar demek değildir.
"... kavrayışını bilgi ile derinleştir ..."
PF @ ST

sem

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

heartsmagic

Bir süre foruma uğrayamamıştım, uygulama hayata geçmiş. C ile yazılan bir şeyleri görmek de sevindiriyor beni, eline sağlık :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.