본문으로 바로가기
homeimage

프로그래밍

해당되는 글 302
  • thumbnail
    컴퓨터/프로그래밍

    C언어 자식 프로세스 종료 확인을 위한 매크로

    C언어 자식 프로세스 종료 확인을 위한 매크로 wait()나 waitpid()에서 자식 프로세스의 종료 상태를 확인하기 위한 매크로를 설명합니다. 헤더: wait.h 형태: - 인수: - 반환: - wait()나 waitpid()에서 자식 프로세스의 종료 상태를 변수 status값으로 확인할 수 있습니다. 8비트 8비트 정상 종료 프로세스 반환 값 0 비정상 종료 0 종료 시킨 시그널 번호 변수 값을 직접 확인하는 것보다는 wait.h에서 제공하는 매크로를 사용하는 것이 더 편하며 컴파일 업그레이드 영향을 받지 않습니다. 매크로 설명 WIFEXITED( status) 자식 프로세스가 정상적으로 종료되었다면 TRUE WIFSIGNALED( status) 자식 프로세스가 시그널에 의해 종료되었다면 TRUE ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 자식 프로세스 종료 확인 함수 waitpid ()

    C함수 자식 프로세스 종료 확인 waitpid() wait()함수처럼 자식 프로세스가 종료될 때까지 대기합니다. 차이점은 wait() 함수가 자식 프로세스 중 어느 하나라도 종료되면 복귀되지만, 즉 대기에서 풀리지만 waitpid()는 특정 자식 프로세스가 종료될 때까지 대기 합니다. 또한, wait()는 자식 프로세스가 종료될 때까지 block되지만 waitpid()는 WNOHANG 옵션을 사용하면 block되지 않고 다른 작업을 진행할 수 있습니다. 헤더: wait.h 형태: pid_t waitpid(pid_t pid, int *status, int options) 인수: pid_t pid 감시할 자식 프로세스 ID int *status 자식 프로세스의 종료 상태 정보 int options 대기를 위..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 자식 프로세스가 종료될 때까지 대기 함수 wait()

    C함수 자식 프로세스가 종료될 때까지 대기 wait() 자식 프로세스 작업이 끝날 때 까지 대기하며, 자식 프로세스가 종료한 상태를 구합니다. 헤더: wait.h 형태: pid_t wait(int *status) 인수: int status 자식 프로세스 종료 상태 반환: pid_t 종료된 자식 프로세스 ID wait()함수를 실행하면 자식 프로세스가 종료될 때가지 대기합니다. 만일 자식 프로세스가 정상 종료하여 main()에서 return 값을 반환하거나, 또는 exit()로 값을 반환하며 정상 종료했다면 wait( int *status)에서 status의 변수 값의 상위 2번째 바이트에 반환 값을 저장합니다. 또는, 어떤 시그널에 의해 종료되었다면 최하위 바이트에 시그널 번호가 저장됩니다. 즉, 8비트..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 프로그램 종료 때 실행할 함수 등록 함수 atexit()

    C함수 프로그램 종료 때 실행할 함수 등록 atexit() 프로그램이 종료될 때 실행하고 싶은 함수를 등록합니다. 즉, 종료 핸들러를 여러 개 등록할 수 있습니다. 헤더: stdlib.h 형태: int atexit(void (*function)(void)) 인수: void (*function)(void) 종료 시 실행할 핸들러 함수 반환: int 0 == 성공, 0 != 실패 C언어 atexit() 함수 예제 #include #include static void on_exit1() { printf( "on_exit1() 호출\n"); } static void on_exit2() { printf( "on_exit2() 호출\n"); } static void on_exit3() { printf( "on_ex..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 프로그램 종료 함수 exit()

    C함수 프로그램 종료 exit() exit()는 프로그램을 종료합니다. 헤더: stdlib.h 형태: void exit(int status) 인수: int main() 함수의 반환값에 해당하는 정수 반환: - C언어 exit() 함수 예제 #include #include // exit() #include // getuid() int main() { if ( 0 != getuid()){ printf( "수퍼유저만 사용할 수 있습니다.\n"); exit( -1); } printf( "이것은 exit() 샘플입니다.\n"); return 0; } C언어 exit() 예제 실행 결과 ]$ ./a.out 수퍼유저만 사용할 수 있습니다. ]$ su - Password: ]$ ./a.out 이것은 exit() 샘플입..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 프로세스 생성 함수 vfork()

    C함수 프로세스 생성 vfork() vfork()도 fork()처럼 자식 프로세스를 생성합니다만 차이점은 fork()가 광역이든 지역이든 메모리 공간까지 똑 같은 복사본을 만들고 부모와 자식이 서로 다른 메모리 공간을 사용하지만 vfork()는 프로세스만 만들고 부모의 메모리 공간을 그대로 이용합니다. 그러므로 부모에서 사용하는 광역변수나 지역변수를 자식에서 사용하면 변경이 되므로 매우 유의해야 합니다. 또한, 자식 프로세스가 생성되면 자식 프로세스가 종료될 때까지 부모프로세스는 대기 상태가 됩니다. fork()가 프로세스의 주소 공간까지 모두 복사본으로 만들어서 시스템 자원에 부담을 주기 때문에 vfork()를 만들었습니다만, 기술의 발전으로 fork()의 단점이 보완되어서 최근에는 vfork()를 사..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 버퍼 내용을 디스크로 쓰기 함수 fsync()

    C함수 버퍼 내용을 디스크로 쓰기 fsync() 파일로 아직 쓰기가 되지 않은 메모리의 내용을 모두 쓰기가 되도록 합니다. sync()가 모든 메모리에 대해서라면 fsync()는 지정된 파일 디스크립터에 대해 진행합니다. 헤더: unistd.h 형태: int fsync (int fd) 인수: int fd 파일 디스크립터 반환: int 0 == 성공, -1 == 실패 C언어 fsync() 함수 예제 #include #include // strlen() #include // open() #include // sync() int main() { int fd; char *str = "https://badayak.com"; fd = open( "test.txt", O_WRONLY ¦ O_CREAT, 0644); ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 버퍼 내용을 디스크로 쓰기 함수 sync()

    C함수 버퍼 내용을 디스크로 쓰기 sync() 파일로 아직 쓰기가 되지 않은 메모리의 내용을 모두 쓰기가 되도록 합니다. 파일로 쓰기를 하더라도 바로 저장되지 않고 메모리 버퍼에 일단 저장되었다가 물리적 디스크로 저장되는데, 정전등의 문제로 중요 자료를 버릴 수 있다고 생각된다면 유용하게 사용할 수 있습니다. 헤더: unistd.h 형태: void sync (void) 인수: - 반환: - C언어 sync() 함수 예제 #include #include // strlen() #include // open() #include // sync() int main() { int fd; char *str = "https://badayak.com\n"; fd = open( "test.txt", O_WRONLY ¦ O..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 루트 디렉토리 지정 함수 chroot()

    C함수 루트 디렉토리 지정 chroot() 특정 디렉토리를 루트 디렉토리 "/"로 지정합니다. 이 함수를 사용하는 이유는 특정 디렉토리 안에서만 작업을 한다면, 매우 긴 작업 디렉토리 이름 대신에 "/"로 짧게 사용할 수 있어서 작업이 편리합니다. 단, 이 함수는 수퍼 유저만 사용할 수 있습니다. 헤더: unistd.h 형태: int chroot(const char *path) 인수: char *path 루트 디렉토리로 지정할 디렉토리 반환: int 0 == 성공, -1 == 실패 C언어 chroot() 함수 예제 현재 작업 디렉토리를 "/"로 지정합니다. "/"로 지정하면 이후로 작업을 "/"를 기준으로 진행할 수 있습니다. #include #include #include #include int mai..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 소유권 변경하기 함수 fchown()

    C함수 소유권 변경하기 chown() 파일의 소유권을 변경합니다. 주의하실 점은 root, 즉 수퍼유저가 실행했을 때 가능하며, chown() 과는 달리 파일 이름이 아닌 파일 디스크립터를 이용합니다. 헤더: unistd.h 형태: int fchown(int fd, uid_t owner, gid_t group) 인수: int fd 파일 디스크립터 uid_t owner 파일에 대한 새로운 소유자의 사용자 ID, 만일 -1이면 변경 취소 gid_t group 파일에 대한 새로운 소유자의 그룹 ID, 만일 -1이면 변경 취소 반환: int 0 == 성공, -1 == 실패 C언어 fchown() 함수 예제 #include #include #include #include #include int main() { i..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 소유권 변경하기 함수 chown()

    C함수 소유권 변경하기 chown() 파일의 소유권을 변경합니다. 주의하실 점은 root, 즉 수퍼유저가 실행했을 때 가능합니다. 헤더: unistd.h 형태: int chown(const char *path, uid_t owner, gid_t group) 인수: char *path 파일 전체 이름 uid_t owner 파일에 대한 새로운 소유자의 사용자 ID, 만일 -1이면 변경 취소 gid_t group 파일에 대한 새로운 소유자의 그룹 ID, 만일 -1이면 변경 취소 반환: int 0 == 성공, -1 == 실패 C언어 chown() 함수 예제 #include #include #include #include int main() { struct passwd *root_pw; if ( 0 != getu..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 파일의 접근 권한 변경 함수 fchmod()

    C함수 파일의 접근 권한 변경 fchmod() 파일의 접근권한을 변경합니다. 헤더: sys/stat.h 형태: int chmod (const char *file, mode_t mode) 인수: char *file 변경하려는 파일 이름 mode_t mode 접근 권한 반환: int 0 == 성공, -1 == 실패 C언어 fchmod() 함수 예제 #include #include int main() { if ( -1 == chmod( "a.out", 0111)) printf( "접근권한 변경 실패\n"); } C언어 fchmod() 예제 실행 결과 ]$ ./a.out 합계 20 drwxr-xr-x 2 jwjw jwjw 4096 9월 25 10:33 . drwxr-xr-x 7 jwjw jwjw 4096 9월 ..
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

    이모티콘을 클릭하면 댓글창에 입력됩니다.