일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 소켓프로그래밍
- 자료구조
- FTP
- C
- Android
- InfluxDB
- Kotlin
- vscode
- InfluxDBClient
- Mat 변수
- 딕셔너리
- 파일입출력
- dictionary
- flutter
- Linked List
- foreground service
- vs code
- 메모리반환
- 문자열파싱
- 문자열 다루기
- dart
- 연결리스트
- socket
- 문자열다루기
- 코틀린
- background service
- 진수변환기
- 콘솔 키보드 이벤트
- ws2_32.lib
- UI
- Today
- Total
목록C (19)
무슨 일로 C 하셨습니까?
앞서 만든 파일 입출력 함수를 가지고 나만의 config 파일을 만들어보겠다. 일단 설정 값들을 가질 구조체를 만든다 typedef struct _Config { int num; char* ip; }Config; 설정 값들이 뭐가 들어갈지는 마음껏 넣어주면 되겠다. 더보기 좀더 동적으로 활용하고 싶다면 2020.10.13 - [C -이걸 굳이?/유틸리티] - [C] 자료구조::딕셔너리 (Dictionary) 지난번에 만든 딕셔너리를 설정 값으로 넣어주면 설정 데이터를 동적으로 지정할 수 있을 것이다. config 구조체에 파일로 저장된 데이터들을 읽는 함수를 만들어보자 int Config_Read(Config* config, char* path) { FILE* stream = NULL; errno_t n..
프로그램 실행 중에 변수에 저장되는 데이터는 지역 변수던 전역 변수던 동적할당이 되었던 정적할당이 되었던 결국 프로그램이 종료되면 데이터도 사라지게 된다. 내가 저장해 놓은 데이터를 다음에 실행할 때에도 유지하고 싶다면 바로 파일 입출력을 이용하면 되겠다. 솔직히 DB도 파일 입출력을 베이스로 만들어진게 아닐까 생각한다. 간단하게 파일을 쓰는 함수를 만들어 보겠다. #include #include void FileWrite() { char* filename = "test1.txt"; FILE* stream = NULL; fopen_s(&stream, filename, "w+"); char* data = "data"; int len = fprintf(stream,"%s\n",data); printf("wr..
송신부가 디렉토리를 전송하면 반대쪽 수신부에서는 디렉토리 내용을 받아서 사용자가 원하는 파일을 선택할 수 있도록 UI로 구현해야한다. 디렉토리 내용을 전송하는 함수를 만들었고, 콘솔 창에서의 UI를 만들었으니 두가지 함수를 합쳐서 구현해보자. 우선 디렉토리에 포함된 파일을 UI에 그릴 수 있도록 문자열 형태로 변환시키는 함수를 만든다. char* File2String(filedata file_) { // [ ] n: | filename | extension | size char temp[100]; char* _extension = FileExtension(file_); sprintf(temp, "%2d: | %16.16s | %6s | %-d", file_.index, file_.name, _extens..
안드로이드나 mfc, wpf 처럼 멋진 GUI를 만들면 좋겠지만 C에서는, 뭣보다 내가 원하는 바는 콘솔창에서 UI를 구현하는 것이다. 옛날 DOS 감성으로 문자로 UI를 그려서 구현하도록 하겠다. #include #include #include typedef struct _Painter { struct _Line* line; }Painter; typedef struct _Line { char* data; struct _Line* next; }Line; 아무래도 UI를 구현하게 된다면 고정적으로 출력되는 화면(문자열)이 존재할 것이다. 그러한 화면을 저장하기 위해 리스트 형식의 자료형을 선언하겠다. void Painting(Painter Paint_) { system("cls"); printf("파일 및..
scanf() 함수를 쓰게되면 콘솔에 키보드 입력을 할 수 있다. 그러나 이러한 방식은 입력된 내용을 엔터 쳐서 넘기는 것인데 이러한 입력말고 콘솔창에서 키보드 입력에 즉각적으로 반응하도록 만들고 싶다. 거두절미하고 일단 만들어 보자 #include void f() { int key; while (1) { key = getch(); printf("%d\n", key); } } } 단순하다. key라는 변수가 getch()를 통해 입력을 하나씩 받으면 된다. 이런식으로 하나씩 다 찍어보면 키보드의 각 키들이 어떠한 입력을 나타내는지 알 수 있다. 이렇게 찍어보면 알 수 있는건 각 알파벳 키들이 아스키 코드와 일치한다는 점이고 엔터가 개행문자로 입력된다는 것 또한 알 수 있다. 그런데 특정 키는 224로 같..
내가 만든 함수들을 사용하다 문득 하나가 빠졌다는 생각이 들었다. 문자열 복사... 어쩌면 가장 먼저 나왔어야할 함수인데... 지난번에 만든 문자열 합성 함수를 쓰면 되긴 하는데 매번 빈문자열도 같이 집어넣기 귀찮으므로 하나 만들겠다. 데이터 복사하는 것이야 어려운 일이 아니다. int num = 3; int ber= num; num = 4; printf("%d",num); // 4 printf("%d",ber); // 3 대입 연산자('=')는 오른쪽의 값을 왼쪽에 복사하는 것이기 때문에 대입 연산자를 쓰기만 해도 데이터는 복사가 된다. 그러나 데이터가 배열인 경우는 이야기가 다르다 int num[3] = {1,2,3}; int ber[3]; int* ptr; num = ber; // 컴파일 에러 pt..
카카오톡으로 사진을 넘겨주듯 보내는 쪽에서 선택해서 파일을 넘겨주면 좋겠지만 받는 쪽에서 원하는 파일을 선택하게 만들고싶다. 그것도 한정된 몇개의 파일이 상대방 컴퓨터 내의 모든 파일을 대상으로 그것을 가능하도록 만들어보겠다. #include #include void f() { struct _finddata_t target; intptr_t handle; int result; handle = _findfirst("*.*", &target); if (handle == -1) return; while (1) { printf("%s[%d]\n", target.name,target.size); result = _findnext(handle, &target); if (result == -1) break; } _f..
FTP(File Transfer Protocol) 파일 전송 프로토콜에 맞게 우선은 파일 전송을 기능을 구현해보겠다. 네트워크를 통한 전송에 앞서 파일을 읽고 읽은 파일을 다시 기록하는 것 부터 시작해야겠다. void f() { FILE* from; FILE* to; char path[] = "C:\\Users\\OJJJ\\Desktop\\"; char filename[] = "lena.JPG"; char* target = StringAdd1(path, filename); char* target2 = StringAdd1(path, "copy.JPG"); fopen_s(&from, target, "rb"); fopen_s(&to, target2, "wb"); free(traget); free(target2..