Hallo semuanya :)
Pertama-tama maaf ya kalau kalian menganggap e-mail ini hanya
membuang-buang bandwidth kalian aja ( sorry moderator ). Tetapi
sebenarnya aku cuma mau membantu ( siapa tahu berguna ) bagi
kalian-kalian yang sering bingung dalam mencari paket yang dibutuhkan
dalam instalasi. Karena nggak bisa menggunakan attachment, maka saya
kirimkan aja source code-nya. Kalian yang membutuhkan bisa
mengkompilasinya sesuai dengan keterangan yang saya buat.
Simpan file ini ( yang ditandai dengan garis === ) dengan nama main.c,
lalu kompilasi dengan :
% gcc -o cari-paket main.c -Wall -O3
Nanti nama programnya adalah "cari-paket".
Oh ya, karena e-mail ini di wraping dengan 72 kolom, pasti ada
bagian-bagian yang berantakan, jadi kamu bisa betulin sendiri atau tanya
saya, sebab takutnya nanti nggak bisa dikompilasi, program ini sudah
saya coba di kompie saya dan berhasil. BTW, kalau ada error, buggy atau
saran...kasih tahu aja ya :)
=========================================
/*
nama file : main.c
"cari-paket" program sederhana pencari paket
By Luser ([EMAIL PROTECTED]), Free-York 4 May 2002.
GPL : Gue Punya Lisensi...he he he :), maksudku Genuine
Public License.
Keterangan :
1. Kompilasi program ini dengan :
% gcc -o cari-paket main.c -Wall -O3
2. Program ini membutuhkan program rpm dan juga akan menggunakan /tmp
dalam menulis file temporary.
3. File temporary tersebut adalah /tmp/data-sementara.
4. Cara penggunaan :
Misal file ini di copy dalam /home/luser
[luser@luser luser]./cari-paket /mnt/cdrom/RedHat/RPMS xpdf
atau
[luser@luser luser]./cari-paket /mnt/cdrom/RedHat/RPMS/ xpdf
artinya : kamu mencari paket yang berisi file xpdf pada direktori
/mnt/cdrom/RedHat/RPMS. 5. Ada yang ndak jelas ?? Hubungi e-mailku aza
dech :)
*/
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
int main(int argc,char** argv)
{
FILE *data = NULL;
struct stat data_file;
char *buffer,*temp_file,*temp_nama;
char nama_paket[30];
/* Sebelumnya..periksa dulu parameter yang dibutuhkan... */
if (argc <= 2)
{
printf("\nParameter yang dibutuhkan kurang lengkap...\n");
printf("Penggunaan...\n");
printf("cari-paket lokasi-rpm nama-file\n");
printf("Keterangan...\n");
printf("cari-paket : program ini.\n");
printf("lokasi-rpm : direktori di mana anda meletakan file-file
rpm.\n"); printf("nama-file : nama file yang akan dicari.\n");
return -1;
};
/* Coba untuk masuk ke direktori tersebut.... */
if (chdir(argv[1]))
{
/* Berarti ada masalah dengan direktori tersebut... */
printf("Direktori %s tidak ditemukan la yaouw.\n",argv[1]);
return -1;
};
/* Sekarang lakukan pencarian... */
if (system("rpm -qilp *.rpm > /tmp/data-sementara"))
{
/* Ada masalah....??? */
printf("Ada masalah...\n");
printf("1. Periksa apakah program rpm benar-benar ada.\n");
printf("2. Periksa apakah dalam direktori tersebut ada file
rpm.\n"); return -1;
};
/* Dapatkan ukuran file... */
if (stat("/tmp/data-sementara",&data_file))
{
/* Error lagi..?? */
printf("Tidak bisa mendapatkan status file
/tmp/data-sementara.\n"); return -1;
};
/* Ambil ukurannya....dan cukupkah memory untuk menampungnya ? */
buffer = malloc(data_file.st_size);
if (!buffer)
{
/* Kita tidak mendapatkan yang kita inginkan... ( biasa dalam
hidup ). */ printf("Tidak mendapatkan memory yang
dibutuhkan...\n"); return -1;
};
/*
Sekarang kita sudah dapat file /tmp/data-sementara, it's party
time...Pinky :) Jadi periksa file tersebut dan cari nama file yang kita
inginkan... */
data = fopen("/tmp/data-sementara","r");
if (!data)
{
/* Ada masalah lagi sayang ? */
printf("Tidak bisa membuka file /tmp/data-sementara.\n");
free(buffer);
return -1;
};
if ((data_file.st_size !=
fread(buffer,data_file.st_size,sizeof(char),data)) && feof(data)) {
/* Ada kesalahan dalam pembacaan ??? */
printf("Maaf..ada kesalahan dalam pembacaan data...\n");
free(buffer);
fclose(data);
return -1;
};
/* Tutup file... */
fclose(data);
/*
Sekarang buffer sudah berisi data...lakukan looping untuk mencari
data-data yang dibutuhkan.
*/
temp_file = buffer;
for (;;)
{
temp_file = strstr(temp_file,argv[2]);
if (temp_file != NULL)
{
/* Dapat sesuatu...?? */
if ((*(temp_file+strlen(argv[2])) != 10) || *(temp_file-1) !=
'/') {
++temp_file;
continue;
}
else
break; /* We got it... */
}
else
break;
};
if (temp_file == NULL)
{
/* Jika file tidak ditemukan, maka nggak usah cari nama...la
yauw...kinclong */ strcpy(nama_paket,"== Tidak ada yang sesuai
=="); }
else
{
/* Saatnya cari nama paket...get ready friend... */
temp_nama = buffer;
while (1)
{
temp_nama = strstr(temp_nama,"Name");
if (temp_nama != NULL)
{
if (*(temp_nama + 12) != ':')
{
/* Data nama yang nggak valid */
++temp_nama;
continue;
};
temp_nama += 14;
if (temp_nama < temp_file)
{
memset(nama_paket,0,30);
strncpy(nama_paket,temp_nama,strchr(temp_nama,32)-temp_nama);
++temp_nama; }
else
break; /* Sudah selesai... */
}
else
break; /* Sesuatu yang seharusnya tidak pernah
terjadi... */ };
};
/*
Melepaskan memory agar tidak terjadi "Memory Leaks"
*/
free(buffer);
/* Hapus data-sementara */
system("rm -f /tmp/data-sementara");
/* Beritahu gue... */
printf("Paket yang anda cari adalah : %s\n",nama_paket);
return 0;
}
=============================================
--
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Dapatkan FAQ milis dg mengirim email kosong ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3