공공00
Platinum개인인증
팔로워2 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 59
검색어 입력폼
  • [유닉스 시스템 프로그래밍] 2장 파일 입출력 (2)
    2021/2 『리눅스 프로그래밍』실습/과제 보고서제목2 장제출일자2021. 09. 23.실습 예제 2-11~2-202-112-122-132-142-152-162-172-182-192-20연습문제 4~74#include#include#includeint main(void){FILE *fp1, *fp2;int n;char ch;fp1=fopen("input", "r");fp2=fopen("output", "w+");while((n=fread(&ch, sizeof(char), 1, fp1))>0){fwrite(&ch, sizeof(char), 1, fp2);fseek(fp1, 1, SEEK_CUR);}return 0;}5#include#include#includeint main(int argc, char* argv[]){FILE *fp1, *fp2;int n;char buf[256];fp1=fopen(argv[1], "r");fp2=fopen(argv[2], "w+");while((n=fread(buf, sizeof(char), 256, fp1))>0)fwrite(buf, sizeof(char), n, fp2);unlink(argv[1]);fclose(fp1);fclose(fp2);return 0;}6#include#include#include#includeint main(void){int fd, n=1, i=0, k=0;char buf[10];int g[4];char ch;fd=open("grade.txt", O_RDONLY);while(1){n=read(fd, &ch, 1);if(n
    공학/기술| 2022.02.09| 6페이지| 1,000원| 조회(151)
    미리보기
  • [유닉스 시스템 프로그래밍] 10장 프로세스간 통신 (2)
    2021/1 『리눅스 프로그래밍』실습/과제 보고서제목10 장제출일자2021. 11. 25.실습 예제 10-4~10-710-410-510-610-7연습문제 2~52번#include #include #include #include #include #include #include #include #include int main(int argc, char **argv) {char buf[1024];// 키 생성 & 공유메모리 획득key_t key = ftok("shmfile", 1);int shmid = shmget(key, 1024, 0);// 공유메모리 연결void *shmaddr = shmat(shmid, NULL, 0);int count = 0;while (count < 5) {sprintf(buf, "[클라이언트] 메세지 %d", count);printf("보낸 메세지 : %sn", buf);// 메세지 기록strcpy(shmaddr, buf);// 서버에 SIGUSR1 시그널 보냄kill(atoi(argv[1]), SIGUSR1);sleep(2);count++;}// 종료를 위해 q 메세지 기록 & SIGUSR1 보냄strcpy(shmaddr, "q");kill(atoi(argv[1]), SIGUSR1);// 공유메모리 연결 해제 & 삭제shmdt(shmaddr);shmctl(shmid, IPC_RMID, NULL);return 0;}3번#include #include #include #include #include #include #include #include #include void *shmaddr;int isContinue;void handler(int signo) {if (signo != SIGUSR1) {return;}/* 수신 */char buf[1024];strcpy(buf, shmaddr);// q가 들어왔다면 송신 반복문 종료 플래그 설정if (strlen(buf) == 1 && buf[0] == 'q') {isContinue = 0;r) {int serverPID = atoi(argv[1]);char input[1024];char buf[1024];// 키 & 공유메모리 획득key_t key = ftok("shmfile", 1);int shmid = shmget(key, 1024, 0);shmaddr = shmat(shmid, NULL, 0);// 시그널 집합에 SIGUSR1을 제외한 시그널 포함sigset_t mask;sigfillset(&mask);sigdelset(&mask, SIGUSR1);// SIGUSR1에 대한 핸들러 지정sigset(SIGUSR1, handler);/* 접속 */// 서버에게 내 PID 전달sprintf(buf, "%d", getpid());strcpy(shmaddr, buf);kill(serverPID, SIGUSR1);isContinue = 1;/* 송신 */while (isContinue) {printf("[클라이언트] ");scanf("%s", input);// 입력받을 동안 q가 들어왔을수도 있으므로 한번 더 체크if (isContinue == 0) {break;}// q를 입력했다면 종료 시퀀스로 넘어감if (strlen(input) == 1 && input[0] == 'q') {break;}// 메시지 기록sprintf(buf, "[클라이언트] %s", input);strcpy(shmaddr, buf);// 서버에게 SIGUSR1 보냄kill(serverPID, SIGUSR1);sleep(1);}/* 종료 */// 서버에게 종료 시퀀스로 넘어갈 것을 통보printf("[클라이언트] 채팅을 종료합니다.n");strcpy(shmaddr, "q");kill(serverPID, SIGUSR1);// 공유메모리 연결 해제 & 삭제shmdt(shmaddr);shmctl(shmid, IPC_RMID, NULL);return 0;}5Pro10_5a.c#include #include #include #include #include #include #includen {int val;struct semid_ds *buf;unsigned short *array;};void *shmaddr;int initsem(key_t semkey) {union semun semunarg;int status = 0, semid;// 세마포어 식별자 생성semid = semget(semkey, 1, IPC_CREAT | IPC_EXCL | 0600);if (semid == -1) {if (errno == EEXIST)// 이미 존재하는 식별자 -> 기존 식별자를 읽어옴semid = semget(semkey, 1, 0);}else {// 세마포어 초기화semunarg.val = 1;status = semctl(semid, 0, SETVAL, semunarg);}if (semid == -1 || status == -1) {perror("initsem");return (-1);}return semid;}int semlock(int semid) {struct sembuf buf;// 공유 자원을 얻고, 잠금 기능 수행buf.sem_num = 0;buf.sem_op = -1;buf.sem_flg = SEM_UNDO;if (semop(semid, &buf, 1) == -1) {perror("semlock failed");exit(1);}return 0;}int semunlock(int semid) {struct sembuf buf;// 공유 자원의 잠금을 해제하고, 공유자원을 돌려줌buf.sem_num = 0;buf.sem_op = 1;buf.sem_flg = SEM_UNDO;if (semop(semid, &buf, 1) == -1) {perror("semunlock failed");exit(1);}return 0;}void semhandle() {int semid;pid_t pid = getpid();// 세마포어 생성 or 가져옴if ((semid = initsem(1)) < 0)exit(1);char buf[BUFSIZ];int i;for (ick : Process %dn", (int)pid);printf("** Lock Mode : Critical Sectionn");strcpy(buf, shmaddr);printf("%sn", buf);// 홀수 알파벳을 1 증가buf[i]++;sleep(1);printf("%sn", buf);strcpy(shmaddr, buf);printf("Unlock : Process %dn", (int)pid);// 공유자원 잠금 해제semunlock(semid);}exit(0);}int main(void) {key_t key = ftok("shmfile", 1);int shmid = shmget(key, 1024, IPC_CREAT | 0666);shmaddr = shmat(shmid, NULL, 0);strcpy(shmaddr, "abcdefghijklmnopqrstuvwxyz");semhandle();shmdt(shmaddr);shmctl(shmid, IPC_RMID, NULL);return 0;}Pro10_5b.c#include #include #include #include #include #include #include #include #include #include #include // 세마포어 공용체union semun {int val;struct semid_ds *buf;unsigned short *array;};void *shmaddr;int initsem(key_t semkey) {union semun semunarg;int status = 0, semid;// 세마포어 식별자 생성semid = semget(semkey, 1, IPC_CREAT | IPC_EXCL | 0600);if (semid == -1) {if (errno == EEXIST)// 이미 존재하는 식별자 -> 기존 식별자를 읽어옴semid = semget(semkey, 1, 0);}else {// 세마포어 초기화semunarg.val = 1;status = semctl(sem {perror("initsem");return (-1);}return semid;}int semlock(int semid) {struct sembuf buf;// 공유 자원을 얻고, 잠금 기능 수행buf.sem_num = 0;buf.sem_op = -1;buf.sem_flg = SEM_UNDO;if (semop(semid, &buf, 1) == -1) {perror("semlock failed");exit(1);}return 0;}int semunlock(int semid) {struct sembuf buf;// 공유 자원의 잠금을 해제하고, 공유자원을 돌려줌buf.sem_num = 0;buf.sem_op = 1;buf.sem_flg = SEM_UNDO;if (semop(semid, &buf, 1) == -1) {perror("semunlock failed");exit(1);}return 0;}void semhandle() {int semid;pid_t pid = getpid();// 세마포어 생성 or 가져옴if ((semid = initsem(1)) < 0)exit(1);char buf[BUFSIZ];int i;for (i = 1; i < 26; i += 2) {// 공유자원 잠금semlock(semid);printf("Lock : Process %dn", (int)pid);printf("** Lock Mode : Critical Sectionn");strcpy(buf, shmaddr);printf("%sn", buf);// 짝수 알파벳을 증가buf[i]++;sleep(1);printf("%sn", buf);strcpy(shmaddr, buf);printf("Unlock : Process %dn", (int)pid);// 공유자원 잠금 해제semunlock(semid);}exit(0);}int main(void) {key_t key = ftok("shmfile", 1);int shmid = shmget(key, 1024, 0);shmaddr = }
    공학/기술| 2022.02.09| 12페이지| 1,000원| 조회(173)
    미리보기
  • [유닉스 시스템 프로그래밍] 6장 프로세스의 생성과 실행
    2021/1 『리눅스 프로그래밍』실습/과제 보고서제목6 장제출일자2021. 11. 04.실습 예제 6-1~6-96-16-26-36-46-56-66-76-86-9연습문제 짝수번2. 고아 프로세스는 무엇인가?: 자식 프로세스보다 부모 프로세스가 먼저 종료하면 자식 프로세스는 고아 프로세스가 된다.4. C 표준 함수인 exit에서 프로세스가 사용 중이던 시스템 자원을 정리하지 않고 _exit함수를 호출하는 이유는 무엇인가?: exit 함수는 C 표준 함수이기 때문에 시스템에 독립적인 기능만 수행하고, 시스템과 관련된 기능은 시스템 호출에서 처리하도록 해야하기 때문에 atexit를 호출한다.6.#include #include #include #include #include int main (int argc, const char * argv[]) {pid_t pid = fork();time_t t;struct tm *tm;switch (pid) {// fork에 실패했을 때case -1:perror("fork에 실패하였습니다.");break;// 자식 프로세스case 0:system("w > bangdoon.txt");printf("[자식] bangdoon.txt 파일에 로그인한 사용자의 정보를 출력하였습니다.n");break;// 부모 프로세스default:time(&t);tm = localtime(&t);printf("[부모] 현재 시간 : %sn", asctime(tm));break;}return 0;}8.#include #include #include #include int main (int argc, const char * argv[]) {pid_t pid = fork();// fork에 실패했을 때if (pid == -1) {perror("[부모] fork에 실패하였습니다.");exit(1);}// 자식 프로세스if (pid == 0) {printf("[자식] who 명령어를 실행합니다.n");// execl로 who 명령어를 실행한다.// l : 인자를 나열한다.// p가 없으므로 who의 절대경로로 지정해준다.if (execl("/usr/bin/who", "/usr/bin/who", NULL) == -1) {perror("[자식] who 명령어 실행에 실패하였습니다.");exit(1);}}else if (pid > 0) {// [부모] 아무 것도 하지 않음}return 0;}10.#include #include #include #include int main (int argc, const char * argv[]) {pid_t pid = fork();// fork에 실패했을 때if (pid == -1) {perror("[부모] fork에 실패하였습니다.");exit(1);}// 자식 프로세스if (pid == 0) {printf("[자식] who 명령어를 실행합니다.n");if (execl("/usr/bin/who", "/usr/bin/who", NULL) == -1) {perror("[자식] who 명령어 실행에 실패하였습니다.");exit(1);}}// 부모 프로세스int status;// 자식을 기다린다.while (waitpid(pid, &status, WNOHANG) == 0) {printf("[부모] 자식 프로세스가 종료되기를 기다리는 중..n");sleep(1);}printf("[부모] 자식의 종료 상태값 : %dn", status >> 8);return 0;}
    공학/기술| 2022.02.09| 6페이지| 1,000원| 조회(250)
    미리보기
  • [유닉스 시스템 프로그래밍] 3장 파일과 디렉토리 (1)
    2021/1 『리눅스 프로그래밍』실습/과제 보고서제목3 장제출일자2021. 10. 07.실습 예제 3-1~3-73-13-23-33-43-53-63-7연습문제 1~31#include #include #include #include #include #include void printfFileAuthority(mode_t mode);int main(int argc, char *argv[]) {char *src;// 인자값에 대한 처리switch (argc) {case 1:printf("인자가 없습니다.n");exit(1);break;case 2:src = argv[1];break;default:printf("인자가 많습니다.n");exit(1);break;}struct stat buf, lbuf;stat(src, &buf);lstat(src, &lbuf);printf("파일명 : %sn", src);printf("Inode 번호 : %dn", (int)buf.st_ino);printf("파일 종류 : ");if (S_ISLNK(lbuf.st_mode)) {printf("심볼릭 링크 파일");}else {if (S_ISFIFO(buf.st_mode)) {printf("FIFO 파일");}else if (S_ISCHR(buf.st_mode)) {printf("문자 장치 특수 파일");}else if (S_ISDIR(buf.st_mode)) {printf("디렉토리");}else if (S_ISBLK(buf.st_mode)) {printf("블록 장치 특수 파일");}else if (S_ISREG(buf.st_mode)) {printf("일반 파일");}else if (S_ISSOCK(buf.st_mode)) {printf("소켓 파일");}}printf("n");printf("파일의 종류 : ");printfFileAuthority(buf.st_mode);printf("n");printf("UID : %dn", (int)buf.st_uid);struct tm *t = localtime(&buf.st_mtime);printf("파일 수정 시각 : %04d-%02d-%02d %02d:%02d:%02dn", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);return 0;}void printfFileAuthority(mode_t mode) {unsigned int ugo;unsigned int r = 04, w = 02, x = 01;int i;for (i = 2; i >= 0; i--) {ugo = (mode >> 3 * i) & 07;if ((ugo & r) == r) {printf("r");}else {printf("-");}if ((ugo & w) == w) {printf("w");}else {printf("-");}if ((ugo & x) == x) {printf("x");}else {printf("-");}}}2.#include #include #include #include #include int main(int argc, char* argv[]) {char ugo, op, rwx;char *target;switch (argc) {case 1:printf("인자가 없습니다.n");exit(1);break;case 2:printf("인자가 부족합니다.n");exit(1);break;case 3:ugo = argv[1][0]; // u/g/oop = argv[1][1]; // +/-rwx = argv[1][2]; // r/w/xtarget = argv[2];break;default:printf("인자가 많습니다.n");exit(1);break;}struct stat buf;stat(target, &buf);switch (rwx) {case 'r':rwx = 4;break;case 'w':rwx = 2;break;case 'x':rwx = 1;break;}int i;mode_t mode = 0;for (i = 0; i < 3; i++) {if (i != 0) {mode = mode < 3;}if (ugo == i) {mode = mode | rwx;}}switch (op) {case '+':chmod(target, buf.st_mode | mode);break;case '-':chmod(target, buf.st_mode &~ mode);break;}}return 0;}3.#include > 3 * 3;for (i = 0; i < 3; i++) {mode[i] -= '0';if ((mode[i] >= 0) && (mode[i]
    공학/기술| 2022.02.09| 10페이지| 1,000원| 조회(269)
    미리보기
  • [유닉스 시스템 프로그래밍] 0. 실습환경 구성
    2021/2 『리눅스 프로그래밍』실습/과제 보고서제목0 장제출일자2021. 09. 04 .1. Vmware 설치구글에서 vmware player 를 검색한 후, 위 사이트에서 다운로드를 한다.다운로드 받은 파일을 실행하여 설치를 진행한다.2. Ubuntu 설치구글에서 ubuntu download를 검색한 후, 우분투 홈페이지에서 버전 20.04.3 을 다운 받는다.Vmware을 실행한 후에 Create a New Virtual Machine을 클릭하여 다운 받은 Ubuntu 파일로 Virtual Machine을 생성한다.이름은 ubuntu20으로 하고 나머지 설정값들은 디폴트 값으로 하여 설치를 진행한다.설치가 완료되면 다음과 같이 패스워드를 입력해서 접속하면 된다.3. 명령어 10개 실행 캡처1. ls : 현재 위치의 파일 목록을 조회하는 명령어2. cd : 디렉토리를 이동하는 명령어3. touch : 파일의 용량이 0인 파일을 생성, 날짜 변경하는 명령어4. mkdir - 디렉토리를 생성하는 명령어5. cp - 파일을 복사하는 명령어6. mv - 파일을 이동시키는 명령어7. rm - 파일을 제거하는 명령어8. cat - 파일의 내용을 화면에 출력하거나 파일을 만드는 명령어9. redirection( ‘>’, ‘>>’) - 화면에 출력되는 결과를 파일로 저장하는 명령어10. alias - 자주 수행하는 명령어들을 쉽게 사용할 수 있도록 설정하는 명령어
    공학/기술| 2022.02.09| 4페이지| 1,000원| 조회(171)
    미리보기
전체보기
받은후기 10
10개 리뷰 평점
  • A+최고예요
    6
  • A좋아요
    0
  • B괜찮아요
    1
  • C아쉬워요
    1
  • D별로예요
    2
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 05월 20일 수요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
7:50 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감