함수 기능
오픈한 파일에 데이터를 쓸 때 사용하는 시스템호출
함수 원형
#include<unistd.h>
Ssize_t write(int filedes, const void *buf, size_t nbytes)
리턴 값 : 성공 시 기록된 바이트수, 에러시 -1 리턴
함수 파라메터
filedes
파일 디스크립터
buf
버퍼
nbytes
얼만큼 쓸지 크기
buf로부터 filedes로 nbytes만큼의 데이터를 쓴다.
함수 예제
wirte1
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#define BUFFER_SIZE 1024
int main(void){
char buf[BUFFER_SIZE];
int length;
length = read(0, buf, BUFFER_SIZE);
write(1,buf,length);
exit(0);
}
write2
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#define S_MODE 0644
#define BUFFER_SIZE 1024
int main(int argc, char *argv[]){
char buf[BUFFER_SIZE];
int fd1, fd2;
int length;
if(argc !=3){
fprintf(stderr, "Usage : %s filein fileout\n",argv[0]);
exit(1);
}
if((fd1=open(argv[1],O_RDONLY))<0){
fprintf(stderr, "open error for %s\n",argv[1]);
exit(1);
}
if((fd2 = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC,S_MODE))<0){
fprintf(stderr, "open error for %s\n",argv[2]);
exit(1);
}
while((length = read(fd1,buf,BUFFER_SIZE))>0){
write(fd2,buf,length);
}
exit(0);
}
write3
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include "ssu_employee.h"
int main(int argc, char *argv[]){
struct ssu_employee record;
int fd;
if(argc<2){
fprintf(stderr, "usage : %s file\n",argv[0]);
exit(1);
}
if((fd =open(argv[1], O_WRONLY | O_CREAT | O_EXCL,0640))<0){
fprintf(stderr, "open error for %s\n", argv[1]);
exit(1);
}
while(1){
printf("Enter employee name <SPACE> salary: ");
scanf("%s",record.name);
if(record.name[0]=='.')
break;
scanf("%d",&record.salary);
record.pid = getpid();
write(fd,(char *)&record, sizeof(record));
}
close(fd);
exit(0);
}
함수 결과
write1
write2
write3
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX stat() fstat() lstat() (0) | 2022.05.01 |
---|---|
C / LINUX dup() dup2() (0) | 2022.05.01 |
C / LINUX setbuf(3) setvbuf(3) (0) | 2022.05.01 |
C / LINUX ungetc(3) (0) | 2022.05.01 |
C / LINUX getc(3) fgetc(3) getchar(3) (0) | 2022.05.01 |