程式設計中應該使用<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)
編譯并執行程式!
這裡使用printf("")其結果輸出到别的終端上去了,這裡主要因我們關閉了标準輸出,然後再打開的時候系統一個終端時候,其檔案描述符為1,系統把檔案描述符為1 的作為标準描述檔案。