일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c++
- 균형잡힌 세상
- 바샤
- system programming
- 해바
- 시스템 프로그래밍
- c
- BAKA
- 5622
- 1874
- 브런치
- LJESNJAK
- IT
- 백준
- Zero That Out
- process control
- QA
- file IO
- Baekjoon
- 2941
- For Beginners
- 입력 버퍼
- Process Communication
- File 조작
- The Balance of the World
- 시프
- 4949
- Parenthesis
- 전자책
- 10773
- Today
- Total
목록전체 글 (52)
해바
link()와 unlink 시스템 호출을 사용하여 파일의 이름을 바꾸는 Linux의 mv 커맨드를 구현할 것 자기 홈 디렉토리에 lab5 디렉토리를 만든 후 프로그램 파일(mv.c)을 보관할 것 #include #include #include int main(int argc, char* argv[]) { link(argv[1], argv[2]); unlink(argv[1]); close(*argv[1]); return 0; } 컴파일 : %gcc mv.c -o mv.out 실행 : %./mv.out afile bfile
커맨드 라인에서 아래와 같은 내용을 입력받는다 : % ./a.out access() 시스템 호출을 이용하여, 만약 파일이 존재하면 파일에서 20-byte의 데이터를 읽어서 std-out에 출력한다. 만약 존재하지 않으면 파일을 새로 만들어, "hello world"라는 내용을 파일에 write 한다. 자기 홈 디렉토리에 lab4 디렉토리를 만든 후 프로그램 파일(access.c)을 보관할 것 #include #include #include #include #include #include #include #define SIZE 20 int main(int argc, char* argv[]) { int fd; if(argc != 2) printf("usage : a.out "); if(access(argv[..
stat() 시스템 호출을 이용하여 파일의 정보를 출력한다 : 주어진 하나의 파일의 inode 번호를 출력한다. 해당 파일의 처음 생성 날짜/시간, 마지막으로 업데이트 된 날짜/시간, 마지막으로 접근한 날짜/시간을 출력한다. 자기 홈 디렉토리에 lab3 디렉토리를 만든 후 프로그램 파일(stat.c)을 보관할 것 #include #include #include #include int main() { int fd; struct stat sb; if(stat("testfile", &sb) == -1) { perror("stat"); return 1; } printf("Inode number : %ld\n", (long)sb.st_ino); printf("처음 생성 날짜/시간 : %s", ctime(&sb.s..
lseek() 시스템 호출을 사용하여, 파일의 원하는 부분을 출력하도록 만든다 : 테스트용 입력파일 "test.txt"에 "abcdefghijklmnop"를 저장한다. lseek 를 사용하여 파일의 시작에서 10개의 character를 건너뛴 후 부터의 내용을 출력한다. lseek 를 사용하여 파일의 끝에서 앞쪽으로 5개의 character를 건너뛴 후 그 내용을 출력한다. 자기 홈 디렉토리에 lab2 디렉토리를 만든 후 프로그램 파일 size.c를 보관할 것 #include #include #include #include #include #include #define BUFSIZE 512 int main() { int fd; char buf1[BUFSIZE] = ""; char buf2[BUFSIZE]..
open(), close(), read(), write() 시스템 호출을 이용하여, 한 파일의 내용을 다른 파일에 복사하는 copy.c 프로그램을 작성하라. #include #include #include #include #define BUFSIZE 512 #define PERMS 0644 int main(int argc, char** argv) { char buffer[BUFSIZE]; int ofd, nfd;// ofd : 원본파일, nfd : 생성할 파일 ssize_t nread; if((ofd = open(argv[1], O_RDONLY)) == -1) { printf("Cannot open %s\n", argv[1]); exit(1); } // 원본파일 열기 if((nfd = open(argv[..
문제 https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 풀이 백준 게시판에 올라온 풀이 Tip Quick Sort로 풀고 보나 마나 맞겠지 했다가 시간 초과가 떠서 당황했다. 시간 초과의 원인은, 최악의 경우(ex. 정렬 혹은 역정렬) $O(n^2)$의 시간 복잡도를 가지기 때문이었다. Quick Sort 아래 define으로 정의된 SWAP 함수를 매크로 함수라고 한다. 처음에 그냥 void swap(int* x, int* y) 꼴..
문제 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 풀이 시간복잡도가 O($n^2$)인 정렬 알고리즘 중에 아무거나 쓰면 된다. Bubble Sort와 Insert Sort 둘 다 짜봤다(기본 개념은 여기를 참고함). 5 2 3 4 1 이란 숫자를 정렬하는 방법을 설명하는 건 아날로그적 방식으론 바로 설명할 수 있는데, 코드로 구현하는 과정은 전혀 다른 문제다. 다음에 풀어볼 Merge Sort나 Quick Sort는 특히나.. C++이라면 #in..
문제 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 풀이 해결 방법은 입력된 수열 값과 일치할 때까지 값을 비교하며 스택에 넣다가, 일치하면 일치하지 않을 때까지 스택에서 빼는 것이다. 처음에는 값을 8번 입력하는 범위 안에서 임의로 넣어도 작동해야 하는 줄 알고 입력받은 값을 sort함수로 정렬시켜서 비교하려고 난리쳤는데 나중에 다시 보니 1부터 n까지 순서대..