시스템프로그래밍 중간정리(lect 6)
File system calls
open,read,write function 이 함수들을 사용하기 위해서는 다음과 같은 헤더파일들이 필요하다.
copy all data from f1 to f2. Check "f2" with "cat f2".
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h> //시스템콜을 할 때 필수적으로 위 4개의 헤더파일이 필요하다.
#include <stdio.h>
#include <string.h>
int main(){
int x1, x2, y; //x1,x2에는 파일넘버가 들어갈 것이고, y에는 읽은 바이트수가 들어갈 예정.
char buf[50];
x1=open("f1", O_RDONLY, 00777); // open f1 for reading
x2=open("f2", O_RDWR | O_CREAT | O_TRUNC, 00777); // f2를 읽고 쓰기용으로 열고, create,truncate하라.
for(;;){
y=read(x1, buf, 20); // read max 20 bytes from f1
if (y==0) break; // if end-of-file, get out
write(x2, buf, y); // write to f2
}
return 0;
}
--------------------------------------------------------------------------------------------------
x=open("f8", O_CREAT|O_RDWR|O_TRUNC, 00777);
write(x, "ab", 2); //f8에 ab를 쓴다.
int y=10;
write(x, &y, 4); //f8에 y에 들어있는 10을 쓴다. 하지만 아스키코드 상에 존재하는 10은 줄바꿈문자이므로 4바이트를 줄바꿈문자 하나로 퉁친다.
write(x, "cd", 2);//f8에 cd를 쓴다
y=235;
write(x, &y, 4); //f8에 235를 쓰고싶지만, 아스키코드 상으로 235는 존재하지 않기때문에 이상한 문자가 써진다.
//write함수를 사용할 때 xxd를 이용하여 어떻게 쓰여지는지 확인했다. xxd로는 알맞은 값이 들어가지만, 아스키코드로 바꾸는 과정에서 아스키테이블에 존재하지 않는 문자들은 이상하게 쓰여진다.