목차
없음
본문내용
t(fileName, statBuf)
/*필요시 상태 엔트리 추가*/
char* fileName;
struct stat* statBuf;
{
int entryIndex;
entryIndex = findEntry(fileName); /*존재하는 엔트리 찾기*/
if(entryIndex == NOT_FOUND)
entryIndex == addEntry(fileName, statBuf); /* 새 엔트리 추가*/
else
updateEntry(entryIndex, statBuf); /*기존 엔트리 수정*/
if(entryIndex != NOT_FOUND)
stats[entryIndex].thisCycle = TRUE; /*상태 배열 수정*/
}
/*************************************************************************/
findEntry(fileName)
char* fileName;
/* 상태 배열 내의 명명된 화일의 인덱스 위치*/
{
int i;
for(i = 0; i < MAX_FILES; i++)
if(stats[i].lastCycle && strcmp(stats[i].fileName, fileName) == 0) return(i);
return(NOT_FOUND);
}
/*************************************************************************/
addEntry(fileName, statBuf)
char* fileName;
struct stat* statBuf;
/*상태 배열에 새로운 엔트리 추가*/
{
int index;
index = nextFree(); /*다음 자유 엔트리 찾기*/
if(index == NOT_FOUND) return(NOT_FOUND); /*남은 것 없음 */
strcpy(stats[index].fileName, fileName); /*화일 이름 추가*/
stats[index].status = *statBuf; /*상태 정보 추가*/
printf("ADDED"); /*표준 출력에 알림 */
printEntry(index); /*상태 정보 표시 */
return(index);
}
/*************************************************************************/
nextFree()
{
int i;
for(i = 0; i < MAX_FILES; i++)
if(!stats[i].lastCycle && !stats[i].thisCycle) return(i);
return(NOT_FOUND);
}
/*************************************************************************/
updateEntry(index, statBuf)
int index;
struct stat* statBuf;
/*파일의 변동 정보를 표시*/
{
if(stats[index].status.st_mtime != statBuf->st_mtime)
{
stats[index].status = *statBuf;
printf("CHANGED");
printEntry(index);
}
}
/*************************************************************************/
printEntry(index)
int index;
/*상태 배열의 엔트리 표시 */
{
printf("%s ", stats[index].fileName);
printStat(&stats[index].status);
}
/*************************************************************************/
printStat(statBuf)
struct stat* statBuf;
/* 상태 버퍼 표시 */
{
printf("size %lu bytes, mod. time = %s", statBuf->st_size, asctime(localtime(&statBuf->st_mtime)));
}
/*************************************************************************/
fatalError()
{
perror("monitor: ");
exit(1); /*실패*/
}
/*프로사용법 및 설명
monitor [ -t delay] [-c count] { fileName }+
모든 명세된 화일들을 매 delay 초마다 조사하고, 마지막 조사 이후 수정된 화일에 대한 정보를 화면에 표시한다. 만일
, fileName이 디렉토리라면, 그 디렉토리 안의 모든 화일들이 조사된다. 화일의 수정은 다음 세가지 방법중의 하나로
표시된다.
1. ADDED 마지막 조사이후에 화일이 생성되었음을 나타낸다. 첫번째 조사 동안에 화일 목록 안에 있는 모든 화일 들에
이 표식이 주어진다.
2. CHANGED 마지막 조사 이후에 화일이 수정되었음을 나타낸다.
3. DELETED 마지막 조사 이후에 화일이 삭제되었음을 나타낸다.
화일과 디렉토리의 수정여보를 계속하여 조사한후 stat() 시스템 호출을 사용해서, 명명된 화일의 유형이라든지 마지막
수정 시간에 대한 정보를 얻는다. 또한, 시스템 호출 getdents()를 사용해서 디렉토리를 조사한다. monitor는 stat라 불리는
상태 표를 유지하는데, 그것은 자신이 발견한 각 화일에 대해
1. 화일의 이름
2. stat()의 의해 얻어 상태 정보
3. 화일의 현재의 조사와 이전의 조사 사에에 존재 했었는지의 기록
등의 정보를 저장한다.
조사하는동안
1. 만인 화일이 조사표(scan table)에 없다면, 그것은 추가된 것이며, "ADDED"라는 메시지를 출력한다.
2. 화일이 이미 조사표에 있고 마직막 조사 이후에 수정되었다면, "CHANGED"라는 메시지를 표시한다.
3. 조사의 마지막에 이전의 조사에서는 존재했으나 현재 조사에서는 존재하지 않는 모든 엔트리들은 조사표
에서 삭제되고, "DELETED"라는 메시지가 표시된다.
/*필요시 상태 엔트리 추가*/
char* fileName;
struct stat* statBuf;
{
int entryIndex;
entryIndex = findEntry(fileName); /*존재하는 엔트리 찾기*/
if(entryIndex == NOT_FOUND)
entryIndex == addEntry(fileName, statBuf); /* 새 엔트리 추가*/
else
updateEntry(entryIndex, statBuf); /*기존 엔트리 수정*/
if(entryIndex != NOT_FOUND)
stats[entryIndex].thisCycle = TRUE; /*상태 배열 수정*/
}
/*************************************************************************/
findEntry(fileName)
char* fileName;
/* 상태 배열 내의 명명된 화일의 인덱스 위치*/
{
int i;
for(i = 0; i < MAX_FILES; i++)
if(stats[i].lastCycle && strcmp(stats[i].fileName, fileName) == 0) return(i);
return(NOT_FOUND);
}
/*************************************************************************/
addEntry(fileName, statBuf)
char* fileName;
struct stat* statBuf;
/*상태 배열에 새로운 엔트리 추가*/
{
int index;
index = nextFree(); /*다음 자유 엔트리 찾기*/
if(index == NOT_FOUND) return(NOT_FOUND); /*남은 것 없음 */
strcpy(stats[index].fileName, fileName); /*화일 이름 추가*/
stats[index].status = *statBuf; /*상태 정보 추가*/
printf("ADDED"); /*표준 출력에 알림 */
printEntry(index); /*상태 정보 표시 */
return(index);
}
/*************************************************************************/
nextFree()
{
int i;
for(i = 0; i < MAX_FILES; i++)
if(!stats[i].lastCycle && !stats[i].thisCycle) return(i);
return(NOT_FOUND);
}
/*************************************************************************/
updateEntry(index, statBuf)
int index;
struct stat* statBuf;
/*파일의 변동 정보를 표시*/
{
if(stats[index].status.st_mtime != statBuf->st_mtime)
{
stats[index].status = *statBuf;
printf("CHANGED");
printEntry(index);
}
}
/*************************************************************************/
printEntry(index)
int index;
/*상태 배열의 엔트리 표시 */
{
printf("%s ", stats[index].fileName);
printStat(&stats[index].status);
}
/*************************************************************************/
printStat(statBuf)
struct stat* statBuf;
/* 상태 버퍼 표시 */
{
printf("size %lu bytes, mod. time = %s", statBuf->st_size, asctime(localtime(&statBuf->st_mtime)));
}
/*************************************************************************/
fatalError()
{
perror("monitor: ");
exit(1); /*실패*/
}
/*프로사용법 및 설명
monitor [ -t delay] [-c count] { fileName }+
모든 명세된 화일들을 매 delay 초마다 조사하고, 마지막 조사 이후 수정된 화일에 대한 정보를 화면에 표시한다. 만일
, fileName이 디렉토리라면, 그 디렉토리 안의 모든 화일들이 조사된다. 화일의 수정은 다음 세가지 방법중의 하나로
표시된다.
1. ADDED 마지막 조사이후에 화일이 생성되었음을 나타낸다. 첫번째 조사 동안에 화일 목록 안에 있는 모든 화일 들에
이 표식이 주어진다.
2. CHANGED 마지막 조사 이후에 화일이 수정되었음을 나타낸다.
3. DELETED 마지막 조사 이후에 화일이 삭제되었음을 나타낸다.
화일과 디렉토리의 수정여보를 계속하여 조사한후 stat() 시스템 호출을 사용해서, 명명된 화일의 유형이라든지 마지막
수정 시간에 대한 정보를 얻는다. 또한, 시스템 호출 getdents()를 사용해서 디렉토리를 조사한다. monitor는 stat라 불리는
상태 표를 유지하는데, 그것은 자신이 발견한 각 화일에 대해
1. 화일의 이름
2. stat()의 의해 얻어 상태 정보
3. 화일의 현재의 조사와 이전의 조사 사에에 존재 했었는지의 기록
등의 정보를 저장한다.
조사하는동안
1. 만인 화일이 조사표(scan table)에 없다면, 그것은 추가된 것이며, "ADDED"라는 메시지를 출력한다.
2. 화일이 이미 조사표에 있고 마직막 조사 이후에 수정되었다면, "CHANGED"라는 메시지를 표시한다.
3. 조사의 마지막에 이전의 조사에서는 존재했으나 현재 조사에서는 존재하지 않는 모든 엔트리들은 조사표
에서 삭제되고, "DELETED"라는 메시지가 표시된다.
추천자료
c로배우는알고리즘에서 ROBOT프로그램을 C언어로 바꾸자.
C언어 야구 게임
C언어를 이용해 하노이탑 구현 프로그램
C언어를 이용한 분수의 덧셈과 곱셈을 하는 프로그램
C언어를 이용해 문자열을 추출하는 프로그램
C언어를 이용한 야구게임(숫자맞추기) 프로그램
C언어를 이용한 성적처리(성적관리) 프로그램
C언어를 이용한 [3][3]행렬(3*3행렬), 행렬의 덧셈과 행렬의 곱셈
C언어 처음공부하는 사람들에게 도움이 되는 코딩들(기초부터 포인터까지)
c언어로 만든 typedef 구조체 개념 프로그램
c언어 계산기
c언어로 애니메이션을 만들어 주세요
c언어에서의 포인터(pointer)
C언어express 연습문제입니다
소개글