C 언어
마지막 장에서는 C 프로그래밍 언어가 처리하는 표준 입력 및 출력 장치에 대해 설명했습니다. 이 장에서는 C 프로그래머가 데이터 저장을 위해 텍스트 또는 바이너리 파일을 만들고, 열고, 닫는 방법을 다룹니다.
파일은 텍스트 파일이든 바이너리 파일이든 관계없이 바이트 시퀀스를 나타냅니다. C 프로그래밍 언어는 저장 장치의 파일을 처리하기 위해 고수준 기능과 저수준(OS 수준) 호출에 대한 액세스를 제공합니다. 이 장에서는 파일 관리에 대한 중요한 요구 사항을 안내합니다.
fopen( )을 사용할 수 있습니다. 새 파일을 만들거나 기존 파일을 여는 기능입니다. 이 호출은 FILE 유형의 개체를 초기화합니다. , 스트림을 제어하는 데 필요한 모든 정보가 들어 있습니다. 이 함수 호출의 원형은 다음과 같습니다 -
FILE *fopen( const char * filename, const char * mode );
여기, 파일 이름 파일 이름을 지정하고 모드에 액세스하는 데 사용할 문자열 리터럴입니다. 다음 값 중 하나를 가질 수 있습니다 -
시니어 번호 | 모드 및 설명 |
---|---|
1 | r 읽기용으로 기존 텍스트 파일을 엽니다. |
2 | ㅁ 쓰기 위해 텍스트 파일을 엽니다. 존재하지 않으면 새 파일이 생성됩니다. 여기에서 프로그램이 파일의 시작 부분부터 내용을 쓰기 시작합니다. |
3 | 아 추가 모드에서 쓰기 위해 텍스트 파일을 엽니다. 존재하지 않으면 새 파일이 생성됩니다. 여기에서 프로그램이 기존 파일 콘텐츠에 콘텐츠를 추가하기 시작합니다. |
4 | r+ 읽기와 쓰기 모두를 위해 텍스트 파일을 엽니다. |
5 | w+ 읽기와 쓰기 모두를 위해 텍스트 파일을 엽니다. 파일이 존재하는 경우 먼저 길이가 0으로 자르고, 존재하지 않는 경우 파일이 생성됩니다. |
6 | a+ 읽기와 쓰기 모두를 위해 텍스트 파일을 엽니다. 파일이 없으면 생성합니다. 읽기는 처음부터 시작되지만 쓰기는 추가만 가능합니다. |
이진 파일을 처리하려는 경우 위에서 언급한 액세스 모드 대신 다음 액세스 모드를 사용합니다 -
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
파일을 닫으려면 fclose( ) 함수를 사용하십시오. 이 함수의 원형은 -
int fclose( FILE *fp );
fclose(-) 함수는 성공 시 0을 반환하거나 EOF 파일을 닫는 데 오류가 있는 경우. 이 함수는 실제로 버퍼에 아직 보류 중인 모든 데이터를 파일로 플러시하고 파일을 닫고 파일에 사용된 메모리를 해제합니다. EOF는 헤더 파일 stdio.h에 정의된 상수입니다. .
C 표준 라이브러리는 파일을 읽고 쓰기 위해 문자별로 또는 고정 길이 문자열 형태로 다양한 기능을 제공합니다.
다음은 스트림에 개별 문자를 쓰는 가장 간단한 기능입니다. −
int fputc( int c, FILE *fp );
fputc() 함수 fp가 참조하는 출력 스트림에 인수 c의 문자 값을 씁니다. 성공 시 작성된 문자를 반환합니다. 그렇지 않으면 EOF 오류가 있는 경우. 다음 함수를 사용하여 null로 끝나는 문자열을 스트림에 쓸 수 있습니다. -
int fputs( const char *s, FILE *fp );
fputs() 함수 문자열 s를 씁니다. fp가 참조하는 출력 스트림으로 성공하면 음수가 아닌 값을 반환하고, 그렇지 않으면 EOF를 반환합니다. 오류가 발생하면 반환됩니다. int fprintf(FILE *fp,const char *format, ...)를 사용할 수 있습니다. 파일에 문자열을 쓰는 기능도 있습니다. 다음 예를 시도해 보십시오.
/tmp가 있는지 확인하십시오. 디렉토리 사용 가능. 그렇지 않은 경우 계속하기 전에 컴퓨터에 이 디렉터리를 만들어야 합니다.
#include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); }
위의 코드를 컴파일하고 실행하면 새 파일 test.txt가 생성됩니다. /tmp 디렉토리에 있고 두 가지 다른 기능을 사용하여 두 줄을 씁니다. 다음 섹션에서 이 파일을 읽어보겠습니다.
다음은 파일에서 단일 문자를 읽는 가장 간단한 함수입니다 -
int fgetc( FILE * fp );
fgetc() 함수는 fp가 참조하는 입력 파일에서 문자를 읽습니다. 반환 값은 읽은 문자이거나 오류가 있는 경우 EOF를 반환합니다. . 다음 함수를 사용하면 스트림에서 문자열을 읽을 수 있습니다. -
char *fgets( char *buf, int n, FILE *fp );
fgets() 함수 fp에서 참조하는 입력 스트림에서 최대 n-1개의 문자를 읽습니다. 읽은 문자열을 버퍼 buf에 복사합니다. , null 추가 문자열을 종료하는 문자입니다.
이 함수가 최대 문자 수를 읽기 전에 줄 바꿈 문자 '\n' 또는 파일 EOF의 끝을 만나면 줄 바꿈 문자를 포함하여 해당 지점까지 읽은 문자만 반환합니다. int fscanf(FILE *fp, const char *format, ...)를 사용할 수도 있습니다. 파일에서 문자열을 읽는 함수이지만 첫 번째 공백 문자를 만나면 읽기를 중지합니다.
#include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); }
위의 코드를 컴파일하고 실행하면 이전 섹션에서 생성된 파일을 읽고 다음과 같은 결과를 생성합니다. -
1 : This 2: is testing for fprintf... 3: This is testing for fputs...
여기서 일어난 일에 대해 조금 더 자세히 살펴보겠습니다. 먼저 fscanf() 이것만 읽으세요 그 후에 공백이 발생했기 때문에 두 번째 호출은 fgets()에 대한 것입니다. 줄의 끝을 만날 때까지 나머지 줄을 읽습니다. 마지막으로 fgets() 두 번째 줄을 완전히 읽습니다.
이진 입력 및 출력에 사용할 수 있는 두 가지 기능이 있습니다. -
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
이 두 함수는 메모리 블록(일반적으로 배열 또는 구조)을 읽거나 쓰는 데 사용해야 합니다.
C 언어
디지털 방식으로 모니터링되거나 자동화된 장비의 경우 컨트롤러는 전자 입/출력(I/O) 신호를 사용하여 물리적 센서 및 출력 장치와 상호 작용합니다. 모든 유형의 장비에는 다수의 유선 전기 신호에 물리적으로 연결하고 기능적으로 인터페이스할 수 있는 I/O 시스템이 필요합니다. 이러한 시스템은 현장에서 컨트롤러까지 원활한 연결을 제공하고 산업용 사물 인터넷(IIoT) 이니셔티브를 지원합니다. 애플리케이션에 따라 설계자는 하나 이상의 PC, 임베디드 마이크로컨트롤러, PLC(프로그래밍 가능한 로직 컨트롤러) 및/또는 기타 구성 요소를
Bosch Rexroth는 FABTECH에 맞춰 공개 산업 자동화 플랫폼 ctrlX AUTOMATION의 다음 단계를 발표했습니다. 회사에 따르면 ctrlX I/O의 출시는 앱 기술로 형성된 시스템인 플랫폼에 필드 및 제어 수준의 다른 인터페이스를 추가합니다. I/O 범위는 한편으로는 수평 및 수직 통합을 용이하게 하고 다른 한편으로는 제어 플랫폼 ctrlX CORE의 기능적 확장 역할을 합니다. 앞으로 5G, TSN 및 AI와 같은 미래 기술에 맞춘 I/O 모듈은 물론 포괄적인 통신 및 성능 향상이 제공될 것입니다. 새로운 종