编程中应该使用<unistd.h>中定义的STDIN_FILENO、STDOUT_FINENO、STDERR_FILENO 三个宏来表示0,1,2.在程序中可以使用close来关闭STDOUT_FINENO(标准输出),然后再使用open系统调用打开设备或者文件,则其对应的文件描述符则为1,此时系统就会将其作为标准输出。
使用putty或者别的工具打开两个终端。在其中的一个终端中输入tty。
在使用open函数或别的函数时候不知道使用什么头文件时候可以使用man 2 open (man 2 表示查看系统调用,man 3 fopen 其中man 3 表示查看普通C语言库函数)。
/*
* file_descriptor.c
*
* Created on: 2015-1-20
* Author: hsc
*/
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<unistd.h>
#include<errno.h>
int main(void)
{
close(STDOUT_FILENO);
int fd = open("/dev/pts/1",O_WRONLY);//打开终端
if (fd == -1)
{
printf("%s", strerror(errno));
return -1;
}
printf("fd:%d\n",fd);
while(1)
{
sleep(1);
printf("hello \n");
}
return EXIT_SUCCESS;
}
Makefile文件
.SUFFIXES:.c .o
CC = gcc
SRCS = file_descriptor.c
OBJS = $(SRCS:.c=.o)
EXEC = file_descriptor
start:$(OBJS)
$(CC) -g -o $(EXEC) $(OBJS)
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -f $(OBJS)
编译并执行程序!