E D R , A S I H C RSS
You plan things that you do not even attempt because of your extreme caution.


4일차 #


ls
ls [옵션]
옵션기능
-a, --all디렉토리 내의 모든 파일 출력
-l, --format=long 파일정보(파일종류, 퍼미션, 사이즈)를 표시
-s, --size 1K 블록 단위로 파일 크기 표시
-t, --sort=time 최근의 파일부터 출력
-c, --time 파일 최근 변경 시간에 따라 정렬해서 출력
--color 파일 종류에 따라 색상 표시
-R(recursive) 현재 작업 디렉토리와 하위 디렉토리 모두 출력
--help 도움말

useradd
useradd -d /home/nanbean -p 111 ooo ( 유저를 생성한다. )

chmod
chmod u+x test ( 유저에 s 권한을 주겠다. )

chown
chown 775 /home/sample/test ( test파일에 775를 준다. )

su
su -l ( 다른계정으로 넘어가는데 완전한 권한(-l)을 가져온다. )



geshi c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char *argv[])
{
	struct stat st ;

	if(stat(argv[1], &st ) == -1) {
		perror("[ Stat Error ]\n") ;
		exit(1);
	}

	printf("[ Dev : %d ]\n", st.st_dev) ;
	printf("[ rDev: %d ]\n", st.st_rdev) ;
	printf("[ Size : %d ]\t YUD:%d ]\t[GID:%d ]\n", st.st_size, st.st_uid, st.st_gid) ;
	
	printf("[ Ino : %d ]\t Mode:%d ]\t[Link:%d ]\n", st.st_ino, st.st_uid, st.st_nlink) ;
	printf("[ BlkSize: %d ]\t[ BlkNum:%d ]\n", st.st_blksize, st.st_blocks) ;
	printf("MTime: %s", ctime(&st.st_mtime) ) ;
	printf("CTime: %s", ctime(&st.st_ctime) ) ;
	printf("ATime: %s", ctime(&st.st_atime) ) ;
}



exit(0)의 의미는?
부모 프로세스가 자식 프로세스가 왜 죽었는지 알기 위해서 던져준다.

geshi c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void exit_handler1(void) { printf("[ Arminia-209 ]\n"); }
void exit_handler2(void) { printf("[ GL-209 ]\n"); }

int main(int argc, char *argv[])
{
	int num = 0;

	(argc == 2) ? (num = argv[1][0] - '0') : (exit(0));
	if(num!=1) num = 0;

	printf("[ Ellias-404 ]\n");

	atexit(exit_handler2) ;
	atexit(exit_handler1) ;


	printf("[ Dellias-404 ]\n");

	(num == 0) ? exit(0) : _exit(0) ;
}




cmos
-->
start arch/i386/boot/setup.s
-->
startup_32 arch/i386/kernel/head.s
-->
start_kernel init/main.c
-->
init
-->
login
-->


geshi c
int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
        long retval, d0;

        __asm__ __volatile__(
                "movl %%esp,%%esi\n\t"
                "int $0x80\n\t"         /* Linux/i386 system call */
                "cmpl %%esp,%%esi\n\t"  /* child or parent? */
                "je 1f\n\t"             /* parent - jump */
                /* Load the argument into eax, and push it.  That way, it does
                 * not matter whether the called function is compiled with
                 * -mregparm or not.  */
                "movl %4,%%eax\n\t"
                "pushl %%eax\n\t"               
                "call *%5\n\t"          /* call fn */
                "movl %3,%0\n\t"        /* exit */
                "int $0x80\n"
                "1:\t"
                :"=&a" (retval), "=&S" (d0)
                :"" (__NR_clone), "i" (__NR_exit),
                 "r" (arg), "r" (fn),
                 "b" (flags | CLONE_VM)
                : "memory");
        return retval;
}



geshi c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
	pid_t pid;

	printf("[ Processs PID:%d PPID:%d ]\n\n", getpid(), getppid()) ;

	switch(pid=fork()) {
	case -1:
		perror("[ Fork Error ]\n") ;
		exit(0);
	case 0:
		printf("[ Child PID:%d PPID:%d ]\n", getpid(), getppid());
	  	printf("[ Child END ]\n");
		break;
	default:
		printf("[ Parent PID:%d PPID:%d ]\n", getpid(), getppid() );
	  	printf("[ Parent END ]\n");
		break;
	}

	printf("[ Process End : %d ]\n\n", getpid() );
	exit(0);
}
fork()가 실행되면 child 프로세스를 생성해서 수행하고 parent 프로세스를 수행한다.
switch 이후의 코드는 child에서도 실행, parent에서도 수행된다.
fork()가 수행된 후 parent에게는 child의 PID를 넘겨주고, child에게는 0를 넘겨준다.
그러므로,
[ Processs PID:1839 PPID:1087 ]

[ Child PID:1840 PPID:1839 ]
[ Child END ]
[ Process End : 1840 ]

[ Processs PID:1839 PPID:1087 ]

[ Parent PID:1839 PPID:1087 ]
[ Parent END ]
[ Process End : 1839 ]
의 결과가 나오게 된다.



Paging 기법
4Gbyte를 공유하고 있다가, 변경될 경우 새로운 메모리를 할당 받는다고 보면 된다.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2024-02-11 16:46:58
Processing time 0.0105 sec