본문 바로가기

컴퓨터/언어,프로그래밍

프로세스 입출력 popen 1장. popen(2) 차례 1.1절. 사용법 1.2절. 설명 1.3절. 반환값 1.4절. 에러 1.5절. 예제 프로세스 I/O 1.1절. 사용법 #include FILE *popen(const char *command, const char *type); int pclose(); 1.2절. 설명 popen 은 command 를 shell을 가동시켜서 열고 pipe(2)로 연결한다. pipe 는 기본적으로 단방향으로만 정의 되어 있음으로, 읽기전용 혹은 쓰기전용 으로만 열수 있으며, type 로 정의된다. popen 은 command 를 실행시키고 pip 연결을 위해서 내부적으로 fork() 와 pipe() 를 사용한다. command 는 실행쉘인 /bin/sh 에 -c 옵션을 사용하여서 전달되게 된다. .. 더보기
C Standard Library C Standard Library [Last modified : 2006-11-30] Contents : Diagnostics : Character Class Tests : Error Codes Reported by (Some) Library Functions : Implementation-defined Floating-Point Limits : Implementation-defined Limits : Locale-specific Information : Mathematical Functions : Non-local Jumps : Signals : Variable Argument Lists : Definitions of General Use : Input and Output : Utility functi.. 더보기
fork()와 exec() [펌] 이전에 System Call과 SubRoutine의 차이를 살펴보았기 때문에, 이제 System Call이 무슨 일을 하는지 대충 알 수 있다. (그동안 글은 시간에 쫓겨 자세히 쓸 수 없었지만, 적당한 일 하나를 끝낸 뒤라 시간적 여유가 있어 자세히 써볼까 한다.) System Call로 하드웨어를 컨트롤 하면서 여러가지 작업을 할 수 있는데, fork와 exec는 어떤 작업을 하는 걸까? 이전에 System Call을 활용한 작업 영역을 3가지로 구분하였다. File I/O, Process Control, InterProcess Communication이 그 3가지였는데, fork와 exec는 그 중 Process Control 영역이다. fork와 exec은 따로 얘기할 수 없다. 엄밀히 얘기하면,.. 더보기
fork() 함수를 이용하여 프로세스를 생성하는 이유가 뭔가요? fork 함수를 사용하여 자식 프로세스를 생성하는 것은 알겠습니다. 몇가지 궁금한 것이 있어서요. 1) 자식 프로세스의 생성은 하나의 부모 에서만 가능한 것인가요? 즉 어떤 부모 프로세스에 의해 생성된 자식 프로세스 자체가 부모가 될 수는 없는 것인가요? 2) fork() 함수를 사용하여 프로세스를 생성하는 것은 왜 그런 것인가요? 1)부모프로세스에서 fork()호출하여, 자식프로세스가 생성되면, 자식프로세스로 부터 PID가 반환되게 됩니다. 그러니깐 자식프로세스는 하나의 부모에서만 가능하게 되는거죠. 그리고, 두 프로세스간의 일처리는 PID의 반환에 의해 이뤄지므로 부모프로세스는 자식프로세스의 제어를 할수 있는 역할을 담당하게 됩니다.(부모프로세스는 fork를 호출해서 완전히 독립적인 프로세스를 생성하.. 더보기
fork 는 프로세스를 복제하는 함수입니다. /* runls3 -- run ls in a subprocess */ main() { int pid; printf("Parent pid of a.out: %d\n", getppid()); pid = fork(); /* code for parent process */ if (pid > 0 ) { wait((int *)0); /* wait for completion of child process */ printf("\nParent process id: %d, parent pid: %d, ls completed\n", getpid(), getppid()); exit(0); } /* code for child process */ if (pid == 0) { printf("Child process id: %d, .. 더보기
fork()이야기 1. fork()이야기 1. pstree 명령어를 아무 생각 없이 쳤다가 fork()를 처음 알게 되었을때가 기억났다. 벌써 몇년의 세월이 흘렀구나... 이넘의 pstree는 손에 붙어 버렸구나. 틈만 나면 치는 구나 ls,w 와 함께 ㅋ 처음 알게 됐을 그땐 참 신기 했었다. 왠지... 내가 유닉스 프로세스를 만든다는게 너무 낯설기도 했고. 티비에서만 보던 연예인이, 같이 지하철을 타고 가는 느낌이었다. 갑자기 그때가 생각 나서 주절 주절... UNIX에서 멀티테스킹의 기본 단위는 멀티프로세싱이다. 프로세스를 생성 해서 다중 작업을 할 수 있도록 해준다. 프로세스를 생성 하는 방법중 가장 많이 사용되는 방법중에 하나가 fork()를 이용해서 자식 프로세스를 만드는것이다. 처음에 fork()를 알게되었을땐 무.. 더보기
execl 다른 프로그램 실행 설명 다른 프로그램을 실행하고 자신은 종료합니다. exec 함수에는 아래와 같이 여러 가지가 있습니다. 함수 이름 int execl( const char *path, const char *arg, ...); int execlp( const char *file, const char *arg, ...); int execle( const char *path, const char *arg ,..., char * const envp[]); int execv( const char *path, char *const argv[]); int execvp( const char *file, char *const argv[]); int execve (const char *filename, char *const argv [],.. 더보기
유닉스함수. exec,execv,execl계열 함수 7개의 기능 - execl : 실행파일 수행 - execle : 실행파일 수행(환경변수를 인자로 넘겨줌) - execlp : 현재 디렉토리의 실행파일 수행 - execv : 저장해 실행 파일 수행(배열에 인자 저장) - execve : 실행 파일 수행(환경변수를 인자로 넘겨줌, 배열에 인자 저장) - execvp : 현재 디렉토리의 실행 파일 수행(배열에 인자 저장) - exit : 실행파일 종료 제가 책장사(^ ^)는 아닌데요. 유닉스 시스템 프로그래밍(정재은, 한빛미디어) 참조하시면 유니스 함수에 대한 설명들이 있어요. 참고하세요. 더보기