概述:
所有执行 I/O 操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代 打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe )、 FIFO 、 socket 、终端、 设备和普通文件。针对每个进程,文件描述符都自成一套。stdin、 stdout 和 stderr 变量在程序初始化时用于指代进程的标准输入、标准输出和标准错误。
标准文件描述符
文件描述符 | 用途 | POSIX(可移植操作系统接口)名称 | stdio流 |
0 | 标准输入 | STDIN_FILENO | stdin |
1 | 标准输出 | STDOUT_FILENO | stdout |
2 | 标准输入 | STDERR_FILENO | stderr |
用例
实现功能:
利用标准输入输出把在终端上输入的内容写入到指定文件当中
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#define SIZE 1024
int main(int argc,char *argv[]){
int fd,count;
char buf[SIZE + 1];
//open打开一个文件存放终端上输入的内容,没有该文件则创建
fd = open(argv[1],O_CREAT | O_WRONLY,0664);
if(fd == -1){ //打开文件失败
perror("Open file error");
exit(1);
}
//循环读取终端输入内容
while((count = read(STDIN_FILENO,buf,sizeof(buf))) > 0){
int num = write(fd,buf,count); //读取的内容写入到文件中
if(num == -1){
perror("Write data error");
exit(1);
}
buf[count] = '\0';
//判断终端输入是否结束,输入q或Q则结束输入
if (buf[0] == 'q' || buf[0] == 'Q'){
break;
}
}
close(fd); //关闭文件
}