Ocean_
꾸준한 프로그래밍
Ocean_
전체 방문자
오늘
어제
  • 분류 전체보기 (174)
    • About Me (4)
    • 우아한테크코스 (27)
    • C & LINUX (50)
    • Operating System (12)
    • Database (25)
    • Computer Vision (0)
    • Problem Solving (0)
      • Programmers (0)
      • BOJ (0)
    • 코코코딩공부 (44)
      • Spring (12)
      • JAVA (14)
      • 디자인 패턴 (4)
      • 책 읽기 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • C++
  • 자바
  • 인덱스
  • 블랙잭
  • 우아한테크코스5기
  • C
  • bean
  • BOJ
  • 우아한테크코스
  • 트랜잭션
  • 운영체제
  • signal
  • Operating System
  • 우테코5기
  • 백준
  • Spring
  • 우아한형제들
  • SIGINT
  • 정규화
  • 우테코
  • 리눅스
  • Linux
  • 1259
  • 프로세스
  • 우테코 체스
  • OS
  • DB
  • OperatingSystem
  • 데이터 조작어
  • 원시값 포장

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Ocean_

꾸준한 프로그래밍

C / LINUX  write()
C & LINUX

C / LINUX write()

2022. 5. 1. 17:45

함수 기능

오픈한 파일에 데이터를 쓸 때 사용하는 시스템호출

함수 원형

#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
    'C & LINUX' 카테고리의 다른 글
    • C / LINUX stat() fstat() lstat()
    • C / LINUX dup() dup2()
    • C / LINUX setbuf(3) setvbuf(3)
    • C / LINUX ungetc(3)
    Ocean_
    Ocean_
    dongVeloper

    티스토리툴바