All pastes #439548 Raw Edit

Stuff

public c v1 · immutable
·published 2007-04-14 10:33 UTC
rendered paste body
// **********************// *	morpher.c		*// *	10.3.2007		*	// *	Jernej Virag	*// **********************#include <stdio.h>#include <string.h>//lastni headerji, zaradi večje preglednosti#include "head.h"#include "tail.h"#include "cat.h"#include "ls.h"#include "ll.h"int main(int argc, char* argv[]){	//pogosto je podana polna pot, izločimo samo ime binarya	char* klic;	klic = strrchr(argv[0],'/')+1;	//switch ne spremejema stringov... moramo iti ročno		//generični klic	if (!strcmp(klic,"Metamorfoze"))		printf("To ne dela nič. Pokliči program preko ustreznega symlinka.");	//head ukaz	if (!strcmp(klic,"head"))		head(argv[1]);	//tail ukaz	if (!strcmp(klic,"tail"))		tail(argv[1]);	//cat ukaz	if (!strcmp(klic,"cat"))		cat(&argv[1]); //pošlemo vse argumente razen prvoga	//ls ukaz	if (!strcmp(klic,"ls"))		ls(&argv[1]); //pošlemo vse argumente razen prvoga	//ll ukaz	if (!strcmp(klic,"ll"))		ll(&argv[1]);	return 0;}// **********************************// *  			cat.h	  			*// *  								*// * Izpiše vsebino datotek			*// *								*// **********************************void cat(char* datoteke[]){	int i=0;	//pogledamo če je kaj podanega	if (datoteke[i]==NULL)		{printf ("Podajte seznam datotek.\n"); return;};	FILE *fajl;	char znak;		while(datoteke[i]!=NULL)	{		printf("\nIzpisujem %s: \n",datoteke[i]);		fajl=fopen(datoteke[i],"r");		if (fajl==NULL)			{i++;continue;}		while((znak=fgetc(fajl))!=EOF)			printf("%c",znak);		fclose(fajl);		i++;	}		printf("KONEC IZPISA \n");};// **********************************// *  			head.h  			*// *  								*// * Izpiše prvih 5 vrstic datoteke	*// *								*// **********************************void head(char* datoteka){	int i;	// pogledamo če nam je uporabnik sploh datoteko dal	if (datoteka==NULL)		{ printf("Prosimo, podajte ime datoteke."); return; }		FILE *fajl;	fajl = fopen(datoteka,"r");	char vrstica[255]; //beremo vrstice samo do 255 znakov.		if (fajl == NULL)		{ printf("Napaka pri odpiranju datoteke. \n"); return; }			for (i=0;i<5;i++)	{		if (fgets(vrstica,255,fajl)==NULL)			break;		printf("%s",vrstica);	}	fclose(fajl);}// **************************************// *  			ll.h 					*// *  									*// * Vrne informacije o datoteki		*// *									*// **************************************#include <sys/stat.h>#define F_MODE fileInfo.st_modevoid ll(char* datoteke[]){	int i=0;	//potrebne spremenljivke	char fileName[255];	int fileSize=0;	char dovoljenja[10]; //za lažji izpis dovoljenj	struct stat fileInfo;		while(datoteke[i]!=NULL)	{		memset(dovoljenja,'-',sizeof(dovoljenja)); // napolnimo array z minus znaki		dovoljenja[9]='\0'; // zaključimo zadevo		strcpy(fileName,datoteke[i]); //ime datoteke		stat(fileName,&fileInfo);			//{i++;continue;}		fileSize=fileInfo.st_size; // velikost datoteke		//obdelamo pravice dostopa - to se verjetno da lažje narediti s kakimi bitnimi operacijami		if (S_IRUSR & F_MODE) dovoljenja[0]='r';		if (S_IWUSR & F_MODE) dovoljenja[1]='w';		if (S_IXUSR & F_MODE) dovoljenja[2]='x';		if (S_IRGRP & F_MODE) dovoljenja[3]='r';		if (S_IWGRP & F_MODE) dovoljenja[4]='w';		if (S_IXGRP & F_MODE) dovoljenja[5]='x';		if (S_IROTH & F_MODE) dovoljenja[6]='r';		if (S_IWOTH & F_MODE) dovoljenja[7]='w';		if (S_IXOTH & F_MODE) dovoljenja[8]='x';				//izpis vsega		printf("%s %d %s",fileName,fileSize,dovoljenja);		//še pogledamo če je direktorij		if (S_ISDIR(F_MODE))			printf(" DIR \n");		else			printf("\n");		i++;	}}// **************************************// *  			ls.h 					*// *  									*// * Opravla funkcijo podobno ls ukazu	*// *									*// **************************************#include <dirent.h>#include <sys/stat.h>void ls(char* datoteke[]){	int i=0;	struct stat fInfo; //informacije o datoteki;	DIR *direktorij;	struct dirent* dirp; //struktura ki hrani vsebino direktorija		while(datoteke[i]!=NULL)	{		stat(datoteke[i],&fInfo); //dobimo info o datoteki		if (S_ISDIR(fInfo.st_mode))	//preverimo če je direktorij			{				direktorij=opendir(datoteke[i]);				if (!direktorij)	{i++; continue;}					while((dirp = readdir(direktorij)) != NULL) //izpišemo direktorij					{						printf("%s\n",dirp->d_name);					}			}		else			printf("%s\n",datoteke[i]);		i++;	}}// **************************************// *  			tail.h 					*// *  									*// * Izpiše zadnjih 5 vrstic datoteke	*// *									*// **************************************void tail(char* datoteka){		//deklaracije	char znak;	fpos_t polozaji[6]; //shrani položaje koncev zadnjih šestih vrstic	int counter = 0;	FILE *fajl;	int daljsa=0; //če je datoteka krajša od 5 vrstic bi se dogajale obskurnosti		//pogledamo če nam je uporabnik sploh datoteko dal	if (datoteka==NULL)	{ printf("Prosimo, podajte ime datoteke."); return; }	fajl = fopen(datoteka,"r");			if (fajl==NULL)		{printf("Napaka pri odpiranjudatoteke.\n"); return;};		while(!feof(fajl))	{		znak=fgetc(fajl);		if (znak==(char)10)		{			fgetpos(fajl,&polozaji[counter]);			counter++;			if (counter > 5)				{					counter = 0; //resetiramo counter in označimo, da je datoteka daljša od 5 vrstic					daljsa=1;				}		}	}	//nastavimo položaj za izpis	if (daljsa)		fsetpos(fajl,&polozaji[counter]);	else		rewind(fajl);			while((znak=fgetc(fajl))!=EOF)	{		printf("%c",znak);	};		fclose(fajl);};