2011-12-14 2 views
1

나는 creat와 open 시스템 호출을 모두 시도했다. 둘 다 같은 방식으로 작동하며 나는 그들 사이의 차이를 예측할 수 없습니다. 맨 페이지를 읽었습니다. "열기는 장치 특수 파일을 열 수 있지만 creat은 만들 수 없습니다"를 보여줍니다. 나는 특별한 파일이 무엇인지 이해하지 못한다.c에서 열린 시스템 호출과 creat 시스템 호출의 차이점은 무엇입니까?

다음

내 코드는,

나는 CREAT 시스템 호출을 사용하여 파일을 읽기/쓰기 위해 노력하고 있어요.

#include<stdio.h> 
#include<fcntl.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<unistd.h> 
#include<errno.h> 
#include<stdlib.h> 
int main() 
{ 
int fd; 
int written; 
int bytes_read; 
char buf[]="Hello! Everybody"; 
char out[10]; 
printf("Buffer String : %s\n",buf); 
fd=creat("output",S_IRWXU); 
if(-1 == fd) 
{ 
    perror("\nError opening output file"); 
    exit(0); 
} 

written=write(fd,buf,5); 
if(-1 == written) 
{ 
    perror("\nFile Write Error"); 
    exit(0); 
} 
close(fd); 
fd=creat("output",S_IRWXU); 

if(-1 == fd) 
{ 
    perror("\nfile read error\n"); 
    exit(0); 
} 
bytes_read=read(fd,out,20); 
printf("\n-->%s\n",out); 
return 0; 
} 

출력 "파일"에 "Hello"내용을 출력하지 않았습니다. 파일이 성공적으로 작성되었습니다. 그러나 내용이 비어 있습니다

답변

10

creat 기능 파일을 생성하지만 기존 파일을 열 수 없습니다. 기존 파일에 creat을 사용하면 파일이 잘리고 쓰여질 수 있습니다. Linux manual page에서 인용하자면 : | O_WRONLY | O_TRUNC

CREAT은() 플래그 O_CREAT와 동일로) (열 수와 동일합니다.

장치 특수 파일은 /dev 폴더에있는 모든 파일입니다. 단순히 기기와 통신하는 방법으로 보통 read/write/ioctl 호출입니다.

+0

감사 요아킴 Pileborg :) – Dinesh

0

UNIX 시스템의 초기 버전에서 열린 두 번째 인수는 0, 1 또는 2 일 수 있습니다. 아직 존재하지 않는 파일을 열 수있는 방법이 없었습니다. 따라서 새 파일을 만들려면 별도의 시스템 호출 인 creat이 필요합니다.

int creat(const char *pathname, mode_t mode); 

은 동일합니다 :

하는 것으로

open(pathname, O_WRONLY|O_CREAT|O_TRUNC, mode); 
관련 문제