天天看點

Linux 下檔案描述符(二)

程式設計中應該使用<unistd.h>中定義的STDIN_FILENO、STDOUT_FINENO、STDERR_FILENO 三個宏來表示0,1,2.在程式中可以使用close來關閉STDOUT_FINENO(标準輸出),然後再使用open系統調用打開裝置或者檔案,則其對應的檔案描述符則為1,此時系統就會将其作為标準輸出。

使用putty或者别的工具打開兩個終端。在其中的一個終端中輸入tty。

Linux 下檔案描述符(二)

在使用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)
           

編譯并執行程式!

Linux 下檔案描述符(二)

這裡使用printf("")其結果輸出到别的終端上去了,這裡主要因我們關閉了标準輸出,然後再打開的時候系統一個終端時候,其檔案描述符為1,系統把檔案描述符為1 的作為标準描述檔案。

繼續閱讀