1. open, read, write, close    


int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);


ssize_t read(int fd, void *buf, size_t count);


ssize_t write(int fd, const void *buf, size_t count);


int close(int fd);


2. O_RDONLY, O_WRONLY, O_RDWR


 열기옵션

 설명

 O_RDONLY

읽기 전용으로 열기

 O_WRONLY

쓰기 전용으로 열기 

 O_RDWR

읽기와 쓰기 모두 가능 



3. O_CREATE, O_EXCL, O_APPEND, S_IRUSR, S_IWUSR, S_IXUSR


기타옵션 

 설명

 O_CREATE

해당 파일이 없으면 생성

O_CREAT로 파일을 생성하게 된다면 파일의 접근권한을 지정하기 위해 접근 권한 값을 추가해야 한다.

ex) open( "Helloworld", O_WRONLY | OCREAT, 0644);

파일이 이미 있어도 열기가 가능하여 쓰기를 하면 이전 내용이 사라진다

 O_EXCL

파일이 이미 존재하면 open되지 않아 이전 파일을 보존할 수 있다.

O_EXCL을 함께 사용하면, 파일이 없을 경우에는 O_CREAT 영향을 받아 쓰기 전용의 파일이 생성하고, 파일이 이미 존재하면 open()이 Failure된다.

ex) fd = open( "./test.txt", O_WRONLY | O_CREAT | O_EXCL, 0644)

 O_APPEND

파일을 추가하여 쓰기가 되도록 open 후에 쓰기 포인터가 파일의 끝에 위치하게 된다.

 S_IRUSR

00400 으로 사용자 읽기 권한

 S_IWUSR

00200 으로 사용자 쓰기 권한

 S_IXUSR

00100 으로 사용자 실행 권한



4. 예시


#include <stdio.h>

#include <fcntl.h> // O_WRONLY O_CREAT O_EXCL

#include <unistd.h> // write close

#include <string.h> // strlen


int main(){


    char *temp = "All My Fucking Fam";

    int fd;


    if( 0< (fd=open( "base1.txt", O_WRONLY | O_CREAT | O_EXCL, 0644 )) ){

        write(fd, temp, strlen(temp));

        close(fd);

    }

    else

    {

        printf("File open Failure !\n");

    }


    return 0;

}

 


'Linux > base' 카테고리의 다른 글

Ext4의 이해 (Part2) : Timestamp  (0) 2019.10.01

0. session.php

 세션 변수의 값이 없다면 false 반환


session_cache_limiter([string $cache_limiter]); // 현재 캐시 한정의 이름 반환

 -mode : public / private / nocache

 -public : 프록시와 클라이언트에서 캐시 허용

 -private : 프록시는 허용하지 않고 클라이언트에서 캐시 허용

 -nocache : 모든 프록시/클라이언트 캐쉬 비허용 


1. main.php

 session.php 포함

 userid 세션이 존재하지 않으면 login.php로 이동


2. login.php

 현재 아이디, 비밀번호 입력창과 login 버튼 생성


3. db에 admin 계정값 삽입

MariaDB [rasbp]> insert into member(id, password) values('admin', 1234);

MariaDB [rasbp]> select * from member;


4. login.php

POST방식으로 값 받음


$mysqli=new mysqli($host, $user, $password, $dbname); // mysql과 연결

 

ex) $mysqli=new mysqli("localhost", "ras", "1234", "rasbp");



** 현재 입력한 id, password가 php로 입력되지 않고 있음

0. 환경

-우분투 16.04 64bits


1. 리눅스 커널 소스 다운

https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/

v4.x부분을 v3.x로 바꾸면 3.x버전들을 다운받을 수 있는 곳으로 간다.

이런 식으로 원하는 커널 버전을 다운받으면 된다.

링크주소 복사 후 wget 명령어로 압축파일 다운

**이 글에서는 linux-4.4.1.tar.gz  다운 받음


다운받은 파일을 압축해제하고

/usr/src 폴더로 옮긴다.

$ sudo tar -zxvf linux-4.4.1

$ sudo mv linux-4.4.1 /usr/src 


** /usr/src 폴더에서 다운받아서 압축을 풀어도 무관


2. 빌드하려는 커널의 설정

현재 버전의 리눅스에서 사용하는 config 파일을 가져온다.

$ uname -r // 현재 커널 버전 확인

usr/src/linux-4.4.1$ sudo cp /boot/config-현재커널버전 ./.config 

usr/src/linux-4.4.1$ sudo make menuconfig



** 현재 커널 버전이 3.19.0-19-generic인 경우

$ sudo cp /boot/config-3.19.0-19-generic ./.config 

$ sudo make menuconfig


3. 커널 컴파일 (이미지파일 생성)

usr/src/linux-4.4.1$ sudo make-kpkg --initrd --revision=1.0 kernel_image

이 과정이 3~4시간 정도 걸리므로 충분한 시간과 배터리를 가지고 시도한다.


커널이 제대로 설치되었을 경우 /usr/src/ 폴더에서 .deb파일을 확인할 수 있다.


** make-kpkg: command not found

$ sudo apt-get install kernel-package 

** openssl/opensslv.h: No such file or directory

$ sudo apt-get install libssl-dev 



4. 커널 빌드

/usr/src$ sudo dpkg -i 커널이미지파일(.deb)

$uname -r // 현재 커널 버전 확인 


+ Recent posts