πρόγραμμα σε C

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
VASSO
Buffer underflow exception
Buffer underflow exception
Posts: 4
Joined: Fri Nov 16, 2007 3:07 pm

πρόγραμμα σε C

Post by VASSO » Fri Nov 16, 2007 4:38 pm

Γεια σας εχω μια εργασια με θέμα: Γράψτε ένα πρόγραμμα σε C που να προσομοιώνει την εντολή ls όταν αυτή εκτελείται με την παράμετρο -l. Το πρόγραμμά σας, όταν εκτελείται χωρίς ορίσματα, θα πρέπει να εμφανίζει τις πληροφορίες για όλα τα αρχεία του τρέχοντος καταλόγου. Εναλλακτικά, αν λάβει σαν όρισμα το όνομα ενός αρχείου, να εμφανίζει πληροφορίες μονάχα για το αρχείο αυτό. Προαιρετικά, το αποτέλεσμα της παραπάνω εκτέλεσης να γράφεται και στο αρχείο eksodos.txt.
ο κώδικας που έχω γραψει είναι ο εξής:

Code: Select all

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int getsize(char *);  
int numberoflinks(char *); 
int mode(char *); 
int userid(char *); 
int groupid(char *);// 
struct stat attrib;

main(int argc,char *argv[])  { 
struct stat attrib;
argv[1]=”ls”; 
argv[2]=”-l”; 
if (argc!=4)  
{
printf(“lathos arithmos orismaton\n”);
exit(1);
}
if(argv[1]!=”ls”)
printf(“lathos entoli”);
exit(2);
}
if(argv[2]!=”-l”) 
printf(“lathos entoli”);
exit(3);
}
if (stat(argv[1],&attrib) == -1)  
{
printf(“error stat\n”);
exit(4);
}

printf(“%d ”,getsize(argv[3]));
printf(“%s ”,argv[3]);
printf(“%d ”,numberoflinks(argv[3]));
printf(“%d ”,mode(argv[3]));
printf(“%d ”,userid(argv[3]));
printf(“%d ”,groupid(argv[3]));
if(S_ISBLK(attrib.st_mode))
printf(“block special file\n”);
else if(S_ISCHR(attrib.st_mode))
printf(“character special file\n”);
else if(S_ISFIFO(attrib.st_mode))
printf(“fifo or pipe\n”);
else if(S_ISDIR(attrib.st_mode))
printf(“directory\n”);
else if(S_ISREG(attrib.st_mode))
printf(“regular file\n”);
}
int getsize(char *filename) 
{
struct stat attrib;
stat(filename,&attrib);
return attrib.st_size);
}

int numberoflinks(char *filename) 
{
struct stat attrib;
stat(filename,&attrib);
return attrib.st_nlink);
}
struct stat attrib;
stat(filename,&attrib);
return attrib.st_mode);
}
int  userid(char *filename) 
{
int mode(char *filename) 
{
struct stat attrib;
stat(filename,&attrib);
return attrib.st_mode);
}
int  userid(char *filename) 
{
struct stat attrib;
stat(filename,&attrib);
return attrib.st_uid);
}
int groupid(char *filename) 
{
struct stat attrib;
stat(filename,&attrib);
return attrib.st_gid);
}
Αλλα δεν είμαι σίγουρη! Μπόρει κάποιος να με βοηθήσει;
*estrngd
Mbyte level
Mbyte level
Posts: 612
Joined: Thu Dec 16, 2004 1:45 pm
Academic status: N>4
Gender:
Contact:

Post by *estrngd » Fri Nov 16, 2007 5:24 pm

τον έχεις γράψει;
VASSO
Buffer underflow exception
Buffer underflow exception
Posts: 4
Joined: Fri Nov 16, 2007 3:07 pm

Post by VASSO » Fri Nov 16, 2007 8:26 pm

Εννοείς αν τον έχω τρέξει
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Post by tsilochr » Sat Nov 17, 2007 12:28 am

από περιέργεια, VASSO από ποιό τμήμα είσαι? η άσκηση σου μυρίζει έντονα άσκηση λειτουργικών στο ΕΚΠΑ και στην ΑΣΟΕΕ δεν κάνουμε (δυστυχώς) τέτοια στα λειτουργικά.

το βλέπω δύσκολο να σε βοηθά κανείς , εγώ προσωπικά δεν ξέρω τόσο καλή c
VASSO
Buffer underflow exception
Buffer underflow exception
Posts: 4
Joined: Fri Nov 16, 2007 3:07 pm

Post by VASSO » Sat Nov 17, 2007 12:28 pm

Και εγω δεν γνωριζω καλα c. Απλά βοηθάω μια φιλη μου (απο τει) με την εργασία της και ηθελα μια δευτερη γνωμη.
User avatar
elsupreme
Gbyte level
Gbyte level
Posts: 1573
Joined: Mon Nov 21, 2005 10:16 pm
Academic status: N>4
Gender:

Post by elsupreme » Sun Nov 18, 2007 12:29 am

Επόμενη φορά, πρόσεχε λίγο όταν κάνεις copy-paste, αυτά που έγραψες δεν έχουν κανένα συντακτικό νόημα, πόσο μάλλον να δουλεύουν.
Δοκίμασε αυτό :

Code: Select all

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int getsize(char *); 
int numberoflinks(char *);
int mode(char *);
int userid(char *);
int groupid(char *);
struct stat attrib;

main(int argc,char *argv[])  
{
	struct stat attrib;
	//argv[1]=”ls”;
	//argv[2]=”-l”;
	if (argc!=4) 
	{
		printf(“lathos arithmos orismaton\n”);
		exit(1);
	}
	else if(argv[1]!=”ls”)
	{
		printf(“lathos entoli”);
		exit(2);
	}
	else if(argv[2]!=”-l”)
	{
		printf(“lathos entoli”);
		exit(3);
	}
	else if (stat(argv[1],&attrib) == -1) 
	{
		printf(“error stat\n”);
		exit(4);
	}
	printf(“%d ”,getsize(argv[3]));
	printf(“%s ”,argv[3]);
	printf(“%d ”,numberoflinks(argv[3]));
	printf(“%d ”,mode(argv[3]));
	printf(“%d ”,userid(argv[3]));
	printf(“%d ”,groupid(argv[3]));
	if(S_ISBLK(attrib.st_mode))printf(“block special file\n”);
	else if(S_ISCHR(attrib.st_mode))printf(“character special file\n”);
	else if(S_ISFIFO(attrib.st_mode))printf(“fifo or pipe\n”);
	else if(S_ISDIR(attrib.st_mode))printf(“directory\n”);
	else if(S_ISREG(attrib.st_mode))printf(“regular file\n”);
}
int getsize(char *filename)
{
	struct stat attrib;
	stat(filename,&attrib);
	return attrib.st_size();
}

int numberoflinks(char *filename)
{
	struct stat attrib;
	stat(filename,&attrib);
	return attrib.st_nlink();
}
int mode(char *filename)
{
	struct stat attrib;
	stat(filename,&attrib);
	return attrib.st_mode();
}
int  userid(char *filename)
{
	struct stat attrib;
	stat(filename,&attrib);
	return attrib.st_uid();
}
int groupid(char *filename)
{
	struct stat attrib;
	stat(filename,&attrib);
	return attrib.st_gid();
}
Και σημείωσε το εξής : εγώ δεν έγραψα τίποτα επιπλέον, απλώς άλλαξα το κείμενο που μου έδωσες. Δεν έχω συμπεριλάβει (ανάμεσα σε άλλα ενδεχομένως) και τον ορισμό του struct που χρησιμοποιεί ο κώδικας σε διάφορα σημεία, το οποίο χρειάζεται.

edit : thx Punisher,Klefth τα άλλαξα.
Last edited by elsupreme on Sun Nov 18, 2007 7:08 am, edited 2 times in total.
"Must float like lotus on river... and kill old lady!"
The Punisher
Venus Former Team Member
Posts: 7561
Joined: Thu Oct 27, 2005 1:43 pm
Academic status: Alumnus/a
Gender:
Location: Boston, MA

Post by The Punisher » Sun Nov 18, 2007 1:05 am

Code: Select all

return attrib.st_nlink); 
αυτό ακόμη δε δουλέυει ... κάντο

Code: Select all

return attrib.st_nlink(); 
Klefths
bit level
bit level
Posts: 45
Joined: Sat Oct 28, 2006 5:42 pm
Gender:
Location: Αθήνα

Post by Klefths » Sun Nov 18, 2007 2:09 am

Σε όλα τα return υπάρχει το ίδιο λάθος με αυτό που επισημάνει ο Punisher.

Επίσης δε χρειάζεται να γράψεις τον ορισμό του struct γιατί αν πρόσεξες το έχει κάνει include, συγκεκριμένα #include<sys/stat.h>
VASSO
Buffer underflow exception
Buffer underflow exception
Posts: 4
Joined: Fri Nov 16, 2007 3:07 pm

Post by VASSO » Sun Nov 18, 2007 1:24 pm

Ναι όντως είχα κάνει copy-paste στα γρηγορα και δεν το πρόσεξα μετά. Ευχαριστώ πολύ για τη βοήθειά σας.
Post Reply

Return to “Προγραμματισμός”