system()
헤더 파일 : #include <stdlib.h>
원형 : int system(const char *string);
기능 : 인수로 실행시킬 프로세스의 이름을 받아 그 프로세스를 호출
그 프로세스가 종료될 때까지 기다린다(Blocking)
프로세스 생성 + 대기 + 대체를 모두 포함한다.
리턴 값 : 성공 0이 아닌값 리턴, 실패 0 리턴
사용법 두가지로 나뉜다
1. 파일 경우 지정
ex)
system("/root/usr/include/stdio.h");
system("C:\\Windows\\hello.bat");
2. 경로지정 없이 쉘 명령어 입력
ex)
system("ls")
system("ipconfig")
리눅스 환경 변수 지정 경로가 "/usr/bin" 있고, /usr/bin에는 리눅스 명령어가 들어 있다.
sync()
헤더 파일 : #include <unistd.h>
원형 : void sync(void)
리턴 값 : 항상 성공 하므로 반환 값 x
기능 : 동기식 입출력 함수
sync() 함수는 모든 버퍼 내용(데이터 + 메타데이터)을 디스크와 동기화
fsync()
헤더 파일 : #include <unistd.h>
원형 : void fsync(int fd);
리턴 값 : 성공 시 0 , 실패 시 -1
기능 : 동기식 입출력 함수
fsync() 함수는 fd로 지정된 파일과 관련된 모든 변경 자료(데이터 + 메타 데이터)를 디스크와 동기화
디스크 I/O 연산은 커널 안의 버퍼 캐시나 페이지 캐시를 거친다. 프로세스가 파일에 데이터를 기록하면
커널은 그 데이터를 카널의 버퍼들 중 하나에 복사해서 내부 버퍼에 등록해 두고, 적당한 시점이 되면 디스크(메모리)에 기록
데이터가 내부 버퍼에만 있고, 디스크에는 아직 기록되지 않는 상태가 될수 있다
디스크 상 파일 시스템과 버퍼 캐시의 내용 불일치 문제를 해결하기 위해 sync() 또는 fsync() 함수를 사용한다.
'프로그래밍 언어 > c(임베디드)' 카테고리의 다른 글
.HEX 과 .ELF 파일 개념 (0) | 2024.12.14 |
---|---|
Wiegand 통신 (0) | 2024.09.08 |
가변인자 함수 + 디버깅 매크로 (0) | 2024.08.16 |
구조체 & 공용체 [1] (0) | 2024.07.18 |
LSM/MSB , 리틀 엔디안 / 빅 엔디안 (0) | 2024.07.16 |