1. -r
-r 옵션은 명령이 지정된 디렉토리 아래의 모든 하위 디렉토리를 재귀적으로 검색하도록 함
2. -n
-n 옵션은 명령이 일치하는 각 줄의 줄 번호를 인쇄하도록 함
3. -w
-w 옵션은 명령이 부분 일치가 아닌 전체 단어만 일치하도록 함
4. /tmp/kernel/mm
/tmp/kernel/mm은 명령이 주어진 패턴을 가진 파일을 검색할 디렉토리
5. -e
-e 옵션은 검색할 패턴을 지정(이 경우에는 "YouGotIt")
c언어 open, close
C언어 read, write
C언어 Buffer
리눅스 파일권한
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main(int argc, char* argv[]){
//buffer 생성
//buffer란 장치와 장치 간의 데이터 전송을 할 때, 완충작용을 하기 위한 임시 데이터 저장 공간
char buffer[BUFFER_SIZE];
//인자가 제대로입력되지 않았을 경우 err
if(argc != 3)
return -1;
//복사를 위해 읽어올 파일open(), fcntl.h 헤더에존재
//open() 에 성공할 경우, 0초과의 int 반환, 실패 시 -1 반환
// O_RDONLY 로 read only 권한 설정
int desc = open(argv[1], O_RDONLY);
//인자[1]의 파일이 제대로 open()된 경우
if(desc>0)
{
// 복사할 파일 open,
// 해당 파일 없으면 O_CREAT로 생성
// O_CREAT 시 생성할 파일의 접근권한을 0644로 지정
// user, group, other - read(4), write(2), Execute(1) -> 0 (4+2) (4) (4)
// O_WRONLY 로 write only 권한 설정
int desc_cp = open(argv[2], O_WRONLY | O_CREAT, 0644);
if(desc_cp>0)
{
//c언어의 read() 와 write() 는 unistd.h 헤더에 존재
//read(파일 디스크립터, 파일을 읽어들일 버퍼, 읽어들일 데이터 최대 길이)
//read 의 반환값: 실패시 -1, 성공시 읽어들인 바이트 수
int read_size = read(desc, buffer, BUFFER_SIZE);
//write(파일 디스크립터, 전송할 데이터가 들어있는 버퍼, 보낼 데이터의 최대 길이)
//write의 반환값: 실패시 -1, 성공시 전송한 바이트 수
write(desc_cp, buffer, read_size);
}
//desc_cp 파일 디스크립터 종료
close(desc_cp);
}
//desc 파일 디스크립터 종료
close(desc);
return 0;
}
gcc -o mycp mycp.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main(int argc, char* argv[]){
int fd;
char *str = "it is by standing";
char buffer[BUFFER_SIZE] = { 0, }; //다음과 같이 초기화 하지 않으면 쓰레기값 함께 읽힘
if(argc < 2)
{
printf("arguments error\n");
return 1;
}
if((fd = open(argv[1], O_RDONLY)) < 0)
{
printf("file name error %s\n", argv[1]);
return 1;
}
if(lseek(fd, 23, SEEK_SET) < 0)
{
printf("lseek error\n");
return 1;
}
if(read(fd, buffer, strlen(str)) < 0)
{
printf("read error\n");
return 1;
}
printf("%s\n", buffer);
close(fd);
return 0;
}