학부 시절.. 지금으로부터 거의 10년전 유닉스 프로그래밍 수업을 들었었다.

지금 지나고 생각해보면 그걸 왜 들었는지 한심하기도 하지만..(학교에서 들은 수업을 현업에서 쓸일이 없으니..)


당시 과제중에 ls 명령어를 자기만의 방식으로 만들어오라고 했던 것이 있다. 

그래서 나는 다음과 같이 너무 단순하게 만들어서 냈었다.



/*********************************************************************
* myls. 
* USAGE    : myls [directory]
* 
*********************************************************************/

#include <dirent.h>     /*to use dir entry*/
#include <stdio.h>      /*to use standard IO*/
#include <sys/stat.h>   /*to use stat*/
#include <string.h>

int PutStat(struct stat statinfo){
	
	int type=0; /*0:file, 1:directory*/
	char szPerm[8][4]={"---","--x","-w-","-wx","r--","r-x","rw-","rwx"};
	
	/*check file type*/
	if(S_ISLNK(statinfo.st_mode))
		printf("%-18s","Symbolic Link");
	else if(S_ISBLK(statinfo.st_mode))
		printf("%-18s","Block Special");
	else if(S_ISCHR(statinfo.st_mode))
		printf("%-18s","Character Special");
	else if(S_ISDIR(statinfo.st_mode)){
		printf("%-18s","Directory");type=1;}/*to call recursive function*/
	else if(S_ISREG(statinfo.st_mode))
		printf("%-18s","Regular");
	else if(S_ISSOCK(statinfo.st_mode))
		printf("%-18s","Socket");
	else if(S_ISFIFO(statinfo.st_mode))
		printf("%-18s","FIFO");
	else 
		printf("%-18s","Unknown type");	

	/*check File size*/
	printf("%12ld\t",statinfo.st_size);
	
	/*check User,Group ids*/
	printf("%4d %4d\t",statinfo.st_uid,statinfo.st_gid);
	
	/*check ownership lower 9bits are ownership information*/
	printf("%s%s%s\n",szPerm[(statinfo.st_mode>>6)&0x7],szPerm[(statinfo.st_mode>>3)&0x7],szPerm[(statinfo.st_mode&0x7)]);	
	return type;
}
/*recursive fuction for directory*/
void list(char *prefix,char *szDirPath){
	DIR *pDir;
	struct dirent *pEntry;
	struct stat stFile;
	char temp[30];
	
	/*Open driectory*/
	pDir=opendir(szDirPath);
	while((pEntry=readdir(pDir)) != NULL){
		/*If we can't get file stat, print error message and exit 1*/
		if(stat(pEntry->d_name,&stFile) < 0){
			printf("can't get stat of %s.",pEntry->d_name);
			exit(1);
		}
		
		if(prefix){/*incase of subdirectory*/
			strcpy(temp,prefix);
			strcat(temp,"/");	
			strcat(temp,pEntry->d_name);
			printf("%-30s",temp);	
		}
		else
			printf("%-30s",pEntry->d_name);
		
		/*in case of subdirectory*/		
		if(PutStat(stFile)&&(strcmp(pEntry->d_name,".")!=0)&&(strcmp(pEntry->d_name,"..")!=0))
			list(pEntry->d_name,pEntry->d_name);/*recursive calling*/
	}
}
int main(int argc, char *argv[]){

	char *szDirPath;

	/*If argument is not specified, argument will be replaced [current directory]*/
	if(argc<2)
		szDirPath=".";
	else
		szDirPath=argv[1];

	list(NULL,szDirPath);
	return 0;/*No error*/
}


그리고나서, 해당 구현하는 것에 대한 문제가 기말고사 시험에 나왔다. 

아예 시험문제가 다음과 같았다.

1. ls  명령어를 구현하시오.[25점]

밑도 끝도 없는... 이런 시험이 나오게 된 이유가 뭘까 그때는 몰랐지만... 일단 그 해당 수업을 담당하셨던 분이 교수가 아니었고, 다른 학교에서 온 박사과정의 박사학생이었고...프로그래밍을 할줄 모르시던 분이었다. 그래서 수업의 대부분을 발표 수업만 했었던것 같다.


답을 저기 위에서 했던거 처럼 했더니. 0점을 주는게 아닌가??? =_=

가서 이유를 따졌더니, 이 코드는 실행되는 코드가 아닐거라고 .. =_= 그래서 그 앞에서 코드를 그대로 짜서 실행시켜서 보여줬었는데.... 위에 굵은 부분의 용도가 뭔지 몰라서 0점 처리를 했다고.... 


그분은 지금쯤 뭘하고 계실까???

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

,