C & LINUX

    C / LINUX setjmp(3) longjmp(3)

    함수 기능 함수 경계를 넘나드는 분기를 수행하기 위해 사용하는 라이브러리 함수 다른함수에 설정된 레이블로 점프 많은 함수호출로 깊이 중첩되어있을경우 해당 함수에서 나와 다른 상위레벨 함수로 이동가능 함수 원형 #include int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); 리턴 값 : 직접 호출된 경우에는 0 longjmp를 통해 호출된 경우에는 0이 아닌 값 함수 파라메터 env setjmp가 위치한 스택환경과 레지스터 환경을 저장하는 환경변수 val 함수 예제 #include #include #include #include void ssu_nested_func(int loc_var, int loc_volatile, int loc_regist..

    C / LINUX vfork()

    함수 기능 생성도리 새 프로세스가 exec 계열 함수로 새 프로그램을 실행하는 경우에 사용하는 시스템 호출 함수 자식이 먼저 실행됨이 보장 함수 원형 #include #include pid_t vfork(); 함수 예제 #include #include #include #include #include void ssu_local_func(void); int main(void){ printf("Before vfork\n"); ssu_local_func(); printf("After ssu_local_func, my PID is %d\n",getpid()); exit(0); } void ssu_local_func(void){ pid_t pid; if((pid = vfork())==0) printf("I'm ch..

    C / LINUX fork()

    함수 기능 기존 프로세스가 새 프로세스를 생성할 떄 사용하는 시스템호출 함수 자식은 부모의 자료구조, 힙 , 스택의 복사본을 가지기 때문에 동일한 메모리영역을 공유하여 사용하진않지만 텍스트 구역은 공유하여 사용한다. 일반적으로 부모와자식의 실행순서는 알수가 없다. 함수 원형 #include pid_t fork(); 리턴 값 : 자식프로세스인 경우 0, 부모프로세스인경우 자식의 pid 에러시 -1 함수 예제 fork1 #include #include #include char glob_str[] = "write to standard output\n"; int glob_val = 10; int main(void){ pid_t pid; int loc_val; loc_val = 100; if( write(STDO..

    C / LINUX opendir(3) readdir(3) rewinddir(3) closedir(3) telldir(3) seekdir(3)

    함수 기능 opendir 디렉토리를 열어주는 함수 readdir 디렉토리 내부파일 읽는 함수 closedir 디렉토리를 닫는 함수 rewinddir 디렉토리 포인터를 다시 처음으로 돌려놓는 함수 telldir 디렉토리 포인터의 현재위치 알림 함수 seekdir 디렉토리 포인터의 현재위치 수정 함수 함수 원형 #include #include DIR *opendir(const char *filepath); struct dirent *readdir(DIR *dp); void rewinddir(DIR *dp); int closedir(DIR *dp); long telldir(DIR *dp); void seekdir(DIR *dp, long loc); 함수 파라메터 filepath 디렉토리 경로 dp 디렉토리 포..

    C / LINUX utime()

    함수 기능 파일의 최정 접근 시간과 최종 변경 시간을 변경하는 시스템 호출 함수 원형 utimebuf 구조 struct utimbuf { time_t actime;// 접근 시간 time_t modtime;// 수정 시간 }; #include #include int utime(const char *filepath, const struct utimbuf *time); 리턴 값 : 성공시 0 에러시 -1 함수 파라메터 filepath 대상 파일 경로 time 변경될 시간 함수 예제 #include #include #include #include #include #include int main(int argc, char *argv[]){ struct utimbuf time_buf; struct stat sta..

    C / LINUX getcwd(2) get_current_dir_name(2)

    함수 기능 현재 작업 디렉토리에 대한 전체 경로 이름을 얻을 수 있는 시스템 호출 get_current_dir_name = getcwd(NULL,0) 함수 원형 #include char *getcwd(char *buf, size_t size); char *get_current_dir_name(); 리턴 값 : 성공 시 현재 작업 디렉토리의 pathname, 에러시 null 리턴 함수 파라메터 BUF 현재작업디렉토리 경로저장할 버퍼 SIZE 버퍼 사이즈 함수 예제 #include #include #include #define PATH_MAX 1024 int main(void){ char *pathname; if(chdir("/home/oslab")

    C / LINUX chdir(2) fchdir(2)

    함수 기능 현재 작업 디렉토리를 변경하는 시스템호출 chdir 지정한 디렉토리에서 많은 파일처리할 필요가 있을 때 유용하게 사용 함수 원형 #include int chdir(const char *pathname); int fchdir(int fd); 리턴 값 : 성공시 0 에러시 -1 함수 파라메터 pathname 지정한 디렉토리로 이동 함수 예제 #include #include #include int main(void){ if(chdir("/etc")

    C / LINUX mkdir(2) rmdir(2)

    함수 기능 mkdir 디렉토리를 생성 시스템호출 rmdir 디렉토리를 삭제 시스템 호출 함수 원형 #include #include #include int mkdir(const char *filepath, mode_t mode); int rmdir(const char *filepath) 함수 파라메터 윈도우에서 폴더 == 리눅스에서 디렉토리 filepath 디렉토리 경로 mode ex)0666같이 어떤 mode로 디렉토리 만들지 리눅스시스템 프로그래밍 - 홍지만 저 교재 내에 있는 예제를 바탕으로 작성한 글 입니다.

    C / LINUX symlink() readlink()

    함수 기능 symlink 심볼릭 링크를 생성하는 시스템호출 link를 통해 만들어진 하드 링크의 한계를 해결하기 위해 만들어진 것 readlink 심볼릭 링크를 읽는 시스템 호출 심볼릭링크 링크 연결로 원본 파일을 직접 사용하는 것과 같은 효과를 내는 링크 함수 원형 #include int symlink(const char *existingpath, const char *newpath); ssize_t readlink(const char *filepath, void *buf, size_t bufsize); 함수 파라메터 actualpath 실제 파일의 경로 이름, 존재하지않아도됨 sympath 심볼릭 링크의 이름 pathname 링크로 연결된 원래파일 bufsize 문자열 저장될 버퍼크기 함수 예제 #i..

    C / LINUX remove(3) rename(2)

    함수 기능 remove 파일이나 디렉토리를 unlink하는 시스템 호출, root권한 없는 unlink rename 파일 이름을 변경 할 때 호출하는 시스템 호출 함수 원형 #include int remove(const char *filepath); int rename(const char *oldname const char *newname); 리턴 값 : 성공시 0 에러 시 -1 함수 파라메터 filepath 파일의 경로 oldname 바뀌기전 구 이름 newname 바꿀 새로운 이름 함수 예제 remove #include #include #include int main(int argc, char *argv[]){ if(argc !=3){ fprintf(stderr,"usage : %s\n",argv[0..