?? open.c
字號:
/** linux/lib/open.c** (C) 1991 Linus Torvalds*/#define __LIBRARY__#include <unistd.h> // Linux 標準頭文件。定義了各種符號常數(shù)和類型,并申明了各種函數(shù)。// 如定義了__LIBRARY__,則還包括系統(tǒng)調(diào)用號和內(nèi)嵌匯編_syscall0()等。#include <stdarg.h> // 標準參數(shù)頭文件。以宏的形式定義變量參數(shù)列表。主要說明了-個// 類型(va_list)和三個宏(va_start, va_arg 和va_end),用于// vsprintf、vprintf、vfprintf 函數(shù)。//// 打開文件函數(shù)。// 打開并有可能創(chuàng)建一個文件。// 參數(shù):filename - 文件名;flag - 文件打開標志;...// 返回:文件描述符,若出錯則置出錯碼,并返回-1。intopen (const char *filename, int flag, ...){ register int res; va_list arg;// 利用va_start()宏函數(shù),取得flag 后面參數(shù)的指針,然后調(diào)用系統(tǒng)中斷int 0x80,功能open 進行// 文件打開操作。// %0 - eax(返回的描述符或出錯碼);%1 - eax(系統(tǒng)中斷調(diào)用功能號__NR_open);// %2 - ebx(文件名filename);%3 - ecx(打開文件標志flag);%4 - edx(后隨參數(shù)文件屬性mode)。 va_start (arg, flag);__asm__ ("int $0x80": "=a" (res):"" (__NR_open), "b" (filename), "c" (flag), "d" (va_arg (arg, int)));// 系統(tǒng)中斷調(diào)用返回值大于或等于0,表示是一個文件描述符,則直接返回之。 if (res >= 0) return res;// 否則說明返回值小于0,則代表一個出錯碼。設(shè)置該出錯碼并返回-1。 errno = -res; return -1;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -