본문 바로가기
프로그래밍 언어/c(임베디드)

system() / sync()

by [Akashic Records] 개발의선지자 2024. 11. 13.

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