APUE 제5장 표준 IO 라이브러리 part1
3952 단어 apue
5.1 인용문
5.2 흐름 및 FILE 객체
표준 I/O 라이브러리의 경우 스트림(stream) 주위에서 작업을 수행합니다.표준 입출력 라이브러리로 파일을 열거나 만들 때, 우리는 하나의 흐름을 하나의 파일과 결합시켰다.스트림을 열면 표준 입출력 함수 fopen이 FILE 객체에 대한 포인터를 반환합니다.일반적으로 객체는 흐름을 관리하기 위해 입출력 라이브러리에 필요한 모든 정보를 포함하는 구조입니다.
I/O , , , , 。
#include
#include
int fwide (FILE* fp, int mode);
5.3 표준 입력, 표준 출력 및 표준 오류
이 세 가지 표준 I/O 흐름은 미리 정의된 파일 지침인 stdin, stdout, stderr를 통해 인용됩니다.
5.4 버퍼
표준 I/O는 세 가지 캐시 유형을 제공합니다.
SVR4와 4.3+BSD 시스템은 기본적으로 다음과 같은 종류의 캐시를 사용합니다. • 표준 오류는 캐시가 없습니다.만약 터미널 장치와 관련된 다른 흐름이라면, 그것들은 행 캐시이다.그렇지 않으면 전체 캐시입니다.
주어진 흐름 중 하나에 대해 이 시스템의 기본값을 좋아하지 않으면 다음 두 함수 중 하나를 호출하여 캐시 유형을 변경할 수 있습니다.
#include
void setbuf (FILE* fp, void* buf);
void setvbuf (FILE* fp, void* buf, int mode, size_t size);
함수에 자동 변수 클래스의 표준 I/O 캐시를 분배하면 함수에서 되돌아오기 전에 이 흐름을 닫아야 합니다.일반적으로 캐시 길이를 선택하고 캐시를 자동으로 할당해야 합니다.이렇게 처리하면 표준 입출력 라이브러리에서 스트림을 닫을 때 캐시가 자동으로 해제됩니다.언제든지 우리는 하나의 흐름을 강제로 갱신할 수 있다.
#include
int fflush (FILE* fp);
이 함수는 이 흐름의 모든 쓰이지 않은 데이터를 핵으로 전달합니다.fp가 NULL이면 이 함수는 모든 출력 흐름을 새로 고칩니다.
5.5 흐름 열기
#include
FILE* fopen (const char* pathname, const char* mode);
FILE* freopen (const char* pathname, const char* mode, FILE* fp);
// : 、 。
FILE* fdopen (int fd, const char* mode);
// 。
type 매개 변수는 입출력 흐름에 대한 읽기, 쓰기 방식을 지정합니다. ANSI C에서는 type 매개 변수에 15가지 다른 값을 지정할 수 있습니다.
주의: a+ 또는 a 방식으로 파일을 열 때, 매번 읽기 전에, 파일 테이블 항목의 현재 파일 편이량을inode의 파일 길이로 설정합니다.
fdopen에서 type 매개 변수의 의미는 약간 다르다.
#include
#include
#include
int main(int argc, char* argv[]){
int fd = open (argv[1], O_RDONLY); //
char buf[BUFSIZ] = "HELLOWORLD";
write(fd, buf, 10);
FILE* fp = fdopen(fd,"w"); // fd NULL
if (fp)
fprintf(stdout, "succeed to fdopen %s
", argv[1]);
else
fprintf(stdout, "fail to fdopen %s
", argv[1]);
fclose(fp);
return 0;
}
print "fail to fdopen"
int main(int argc, char* argv[]){
int fd = open (argv[1], O_RDWR | O_TRUNC);
char buf[BUFSIZ] = "HELLO WORLD";
write(fd, buf, 11);
FILE* fp = fdopen(fd,"w+");
putc('c',fp);
if (fp)
fprintf(stdout, "succeed to fdopen %s
", argv[1]);
else
fprintf(stdout, "fail to fdopen %s
", argv[1]);
fclose(fp);
return 0;
}
// "HELLO WORLDc", “c”
읽기와 쓰기 형식으로 파일을 열 때 (type 중 + 번호) 다음과 같은 제한이 있습니다. • 중간에 fflush, fseek, fsetpos,rewind가 없으면 출력 뒤에 입력을 직접 따라갈 수 없습니다. •만약 중간에 fseek, fsetpos,rewind가 없거나 출력 작업이 파일 끝에 도착하지 않았다면 입력 작업 후에 출력을 직접 따라갈 수 없습니다.
int main(int argc, char* argv[]){
FILE* fp = fopen(argv[1],"r+");
char ch = fgetc(fp);
fputc(ch, fp);
return 0;
}
// , , linux 3.10.0、 gcc 4.8.3 ??
w나 a 형식을 지정하여 새 파일을 만들 때, 이 파일의 접근 허가 위치를 설명할 수 없습니다. (3장에서 설명한 오픈 함수와creat 함수는 이 점을 할 수 있습니다.)POSIX.1 이러한 방식으로 생성된 파일에는 다음과 같은 액세스 권한이 필요합니다. SIRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH. 그러나umask값을 통해 이 권한을 제한할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
APUE 제5장 표준 IO 라이브러리 part1표준 I/O 라이브러리의 경우 스트림(stream) 주위에서 작업을 수행합니다.표준 입출력 라이브러리로 파일을 열거나 만들 때, 우리는 하나의 흐름을 하나의 파일과 결합시켰다.스트림을 열면 표준 입출력 함수 fope...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.