unistd.h ( File view )

  • By 2010-08-31
  • View(s):24
  • Download(s):2
  • Point(s): 1
			#ifndef _UNISTD_H
#define _UNISTD_H

/* ok, this may be a joke, but I'm working on it */
/* ok, 这也许是个玩笑,但我正在着手处理 */
// 下面符号常数指出符合IEEE 标准1003.1 实现的版本号,是一个整数值。
#define _POSIX_VERSION 198808L

// chown()和fchown()的使用受限于进程的权限。/* 只有超级用户可以执行chown(我想..)*/
#define _POSIX_CHOWN_RESTRICTED	/* only root can do a chown (I think..) */
// 长于(NAME_MAX)的路径名将产生错误,而不会自动截断。/* 路径名不截断(但是请看内核代码)*/
#define _POSIX_NO_TRUNC		/* no pathname truncation (but see in kernel) */
// 下面这个符号将定义成字符值,该值将禁止终端对其的处理。/* 禁止象^C 这样的字符 */
#define _POSIX_VDISABLE '\0'	/* character to disable things like ^C */
// 每个进程都有一保存的set-user-ID 和一保存的set-group-ID。 /* 我们将着手对此进行处理 */
/*#define _POSIX_SAVED_IDS *//* we'll get to this yet */
// 系统实现支持作业控制。 /* 我们还没有支持这项标准,希望很快就行 */
/*#define _POSIX_JOB_CONTROL *//* we aren't there quite yet. Soon hopefully */

#define STDIN_FILENO 0		// 标准输入文件句柄(描述符)号。
#define STDOUT_FILENO 1		// 标准输出文件句柄号。
#define STDERR_FILENO 2		// 标准出错文件句柄号。

#ifndef NULL
#define NULL ((void *)0)	// 定义空指针。
#endif

/* access *//* 文件访问 */
// 以下定义的符号常数用于access()函数。
#define F_OK 0			// 检测文件是否存在。
#define X_OK 1			// 检测是否可执行(搜索)。
#define W_OK 2			// 检测是否可写。
#define R_OK 4			// 检测是否可读。

/* lseek *//* 文件指针重定位 */
// 以下符号常数用于lseek()和fcntl()函数。
#define SEEK_SET 0		// 将文件读写指针设置为偏移值。
#define SEEK_CUR 1		// 将文件读写指针设置为当前值加上偏移值。
#define SEEK_END 2		// 将文件读写指针设置为文件长度加上偏移值。

/* _SC stands for System Configuration. We don't use them much */
/* _SC 表示系统配置。我们很少使用 */
// 下面的符号常数用于sysconf()函数。
#define _SC_ARG_MAX 1		// 最大变量数。
#define _SC_CHILD_MAX 2		// 子进程最大数。
#define _SC_CLOCKS_PER_SEC 3	// 每秒滴答数。
#define _SC_NGROUPS_MAX 4	// 最大组数。
#define _SC_OPEN_MAX 5		// 最大打开文件数。
#define _SC_JOB_CONTROL 6	// 作业控制。
#define _SC_SAVED_IDS 7		// 保存的标识符。
#define _SC_VERSION 8		// 版本。

/* more (possibly) configurable things - now pathnames */
/* 更多的(可能的)可配置参数 - 现在用于路径名 */
// 下面的符号常数用于pathconf()函数。
#define _PC_LINK_MAX 1		// 连接最大数。
#define _PC_MAX_CANON 2		// 最大常规文件数。
#define _PC_MAX_INPUT 3		// 最大输入长度。
#define _PC_NAME_MAX 4		// 名称最大长度。
#define _PC_PATH_MAX 5		// 路径最大长度。
#define _PC_PIPE_BUF 6		// 管道缓冲大小。
#define _PC_NO_TRUNC 7		// 文件名不截断。
#define _PC_VDISABLE 8		//
#define _PC_CHOWN_RESTRICTED 9	// 改变宿主受限。

#include <sys/stat.h>		// 文件状态头文件。含有文件或文件系统状态结构stat{

}和常量。
#include <sys/times.h>		// 定义了进程中运行时间结构tms 以及times()函数原型。
#include <sys/utsname.h>	// 系统名称结构头文件。
#include <utime.h>		// 用户时间头文件。定义了访问和修改时间结构以及utime()原型。

#ifdef __LIBRARY__

// 以下是内核实现的系统调用符号常数,用于作为系统调用函数表中的索引值。( include/linux/sys.h )
#define __NR_setup 0		/* used only by init, to get system going */
/* __NR_setup 仅用于初始化,以启动系统 */
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
#define __NR_link 9
#define __NR_unlink 10
#define __NR_execve 11
#define __NR_chdir 12
#define __NR_time 13
#define __NR_mknod 14
#define __NR_chmod 15
#define __NR_chown 16
#define __NR_break 17
#define __NR_stat 18
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_mount 21
#define __NR_umount 22
#define __NR_setuid 23
#define __NR_getuid 24
#define __NR_stime 25
#define __NR_ptrace 26
#define __NR_alarm 27
#define __NR_fstat 28
#define __NR_pause 29
#define __NR_utime 30
#define __NR_stty 31
#define __NR_gtty 32
#define __NR_access 33
#define __NR_nice 34
#define __NR_ftime 35
#define __NR_sync 36
#define __NR_kill 37
#define __NR_rename 38
#define __NR_mkdir 39
#define __NR_rmdir 40
#define __NR_dup 41
#define __NR_pipe 42
#define __NR_times 43
#define __NR_prof 44
#define __NR_brk 45
#define __NR_setgid 46
#define __NR_getgid 47
#define __NR_signal 48
#define __NR_geteuid 49
#define __NR_getegid 50
#define __NR_acct 51
#define __NR_phys 52
#define __NR_lock 53
#define __NR_ioctl 54
#define __NR_fcntl 55
#define __NR_mpx 56
#define __NR_setpgid 57
#define __NR_ulimit 58
#define __NR_uname 59
#define __NR_umask 60
#define __NR_chroot 61
#define __NR_ustat 62
#define __NR_dup2 63
#define __NR_getppid 64
#define __NR_getpgrp 65
#define __NR_setsid 66
#define __NR_sigaction 67
#define __NR_sgetmask 68
#define __NR_ssetmask 69
#define __NR_setreuid 70
#define __NR_setregid 71

// 以下定义系统调用嵌入式汇编宏函数。
// 不带参数的系统调用宏函数。type name(void)。
// %0 - eax(__res),%1 - eax(__NR_##name)。其中name 是系统调用的名称,与 __NR_ 组合形成上面
// 的系统调用符号常数,从而用来对系统调用表中函数指针寻址。
// 返回:如果返回值大于等于0,则返回该值,否则置出错号errno,并返回-1。
#define _syscall0(type,name) \
type name(void) \
{
 \
long __res; \
__asm__ volatile ( "int $0x80" \	// 调用系统中断0x80。
:"=a" (__res) \		// 返回值??eax(__res)。
:"" (__NR_
##name)); \			// 输入为系统中断调用号__NR_name。
      if (__res >= 0) \		// 如果返回值>=0,则直接返回该值。
      return (type) __res; errno = -__res; \	// 否则置出错号,并返回-1。
      return -1;
}

// 有1 个参数的系统调用宏函数。type name(atype a)
// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a)。
#define _syscall1(type,name,atype,a) \
type name(atype a) \
{
 \
long __res; \
__asm__ volatile ( "int $0x80" \
: "=a" (__res) \
: "" (__NR_##name), "b" ((long)(a))); \
if (__res >= 0) \
return (type) __res; \
errno = -__res; \
return -1; \

}

// 有2 个参数的系统调用宏函数。type name(atype a, btype b)
// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a),%3 - ecx(b)。
#define _syscall2(type,name,atype,a,btype,b) \
type name(atype a,btype b) \
{
 \
long __res; \
__asm__ volatile ( "int $0x80" \
: "=a" (__res) \
: "" (__NR_##name), "b" ((long)(a)), "c" ((long)(b))); \
if (__res >= 0) \
return (type) __res; \
errno = -__res; \
return -1; \

}

// 有3 个参数的系统调用宏函数。type name(atype a, btype b, ctype c)
// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a),%3 - ecx(b),%4 - edx(c)。
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
type name(atype a,btype b,ctype c) \
{
 \
long __res; \
__asm__ volatile ( "int $0x80" \
: "=a" (__res) \
: "" (__NR_##name), "b" ((long)(a)), "c" ((long)(b)), "d" ((long)(c))); \
if (__res>=0) \
return (type) __res; \
errno=-__res; \
return -1; \

}

#endif /* __LIBRARY__ */

      extern int errno;		// 出错号,全局变量。
// 对应各系统调用的函数原型定义。
      int access (const char *filename, mode_t mode);
      int acct (const char *filename);
      int alarm (int sec);
      int brk (void *end_data_segment);
      void *sbrk (ptrdiff_t increment);
      int chdir (const char *filename);
      int chmod (const char *filename, mode_t mode);
      int chown (const char *filename, uid_t owner, gid_t group);
      int chroot (const char *filename);
      int close (int fildes);
      int creat (const char *filename, mode_t mode);
      int dup (int fildes);
      int execve (const char *filename, char **argv, char **envp);
      int execv (const char *pathname, char **argv);
      int execvp (const char *file, char **argv);
      int execl (const char *pathname, char *arg0, ...);
      int execlp (const char *file, char *arg0, ...);
      int execle (const char *pathname, char *arg0, ...);
      volatile void exit (int status);
      volatile void _exit (int status);
      int fcntl (int fildes, int cmd, ...);
      int fork (void);
      int getpid (void);
      int getuid (void);
      int geteuid (void);
      int getgid (void);
      int getegid (void);
      int ioctl (int fildes, int cmd, ...);
      int kill (pid_t pid, int signal);
      int link (const char *filename1, const char *filename2);
      int lseek (int fildes, off_t offset, int origin);
      int mknod (const char *filename, mode_t mode, dev_t dev);
      int mount (const char *specialfile, const char *dir, int rwflag);
      int nice (int val);
      int open (const char *filename, int flag, ...);
      int pause (void);
      int pipe (int *fildes);
      int read (int fildes, char *buf, off_t count);
      int setpgrp (void);
      int setpgid (pid_t pid, pid_t pgid);
      int setuid (uid_t uid);
      int setgid (gid_t gid);
      void (*signal (int sig, void (*fn) (int))) (int);
      int stat (const char *filename, struct stat *stat_buf);
      int fstat (int fildes, struct stat *stat_buf);
      int stime (time_t * tptr);
      int sync (void);
      time_t time (time_t * tloc);
      time_t times (struct tms *tbuf);
      int ulimit (int cmd, long limit);
      mode_t umask (mode_t mask);
      int umount (const char *specialfile);
      int uname (struct utsname *name);
      int unlink (const char *filename);
      int ustat (dev_t dev, struct ustat *ubuf);
      int utime (const char *filename, struct utimbuf *times);
      pid_t waitpid (pid_t pid, int *wait_stat, int options);
      pid_t wait (int *wait_stat);
      int write (int fildes, const char *buf, off_t count);
      int dup2 (int oldfd, int newfd);
     
...
...
(Not finished, please download and read the complete file)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
linux0.00 B0% 04-10-07
<boot>0.00 B04-10-07 15:01
bootsect.s12.49 kB08-01-04 21:38
head.s13.22 kB08-01-04 21:38
setup.s12.42 kB08-01-04 21:38
<fs>0.00 B04-10-07 15:01
bitmap.c8.46 kB02-09-04 13:12
block_dev.c3.95 kB02-09-04 13:12
buffer.c17.71 kB02-09-04 13:12
char_dev.c4.09 kB02-09-04 13:12
exec.c18.90 kB02-09-04 13:12
fcntl.c3.33 kB02-09-04 13:12
file_dev.c4.82 kB02-09-04 13:12
file_table.c209.00 B02-09-04 13:12
inode.c14.92 kB02-09-04 13:12
ioctl.c1.94 kB02-09-04 13:12
Makefile6.80 kB08-01-04 21:45
namei.c37.20 kB02-09-04 13:12
open.c10.00 kB02-09-04 13:12
pipe.c5.42 kB02-09-04 13:12
read_write.c5.86 kB02-09-04 13:12
stat.c2.69 kB02-09-04 13:12
super.c13.57 kB02-09-04 13:12
truncate.c2.46 kB02-09-04 13:12
<include>0.00 B04-10-07 15:01
a.out.h8.22 kB02-09-04 13:14
<asm>0.00 B04-10-07 15:01
io.h772.00 B02-09-04 13:14
memory.h1.03 kB08-01-04 22:13
segment.h2.50 kB02-09-04 13:14
system.h4.08 kB02-09-04 13:14
const.h589.00 B02-09-04 13:14
ctype.h1.68 kB02-09-04 13:14
errno.h2.30 kB02-09-04 13:14
fcntl.h3.30 kB02-09-04 13:14
<linux>0.00 B04-10-07 15:01
config.h2.16 kB02-09-04 13:14
fs.h9.72 kB02-09-04 13:14
hdreg.h2.94 kB02-09-04 13:14
head.h760.00 B02-09-04 13:14
kernel.h1.44 kB02-09-04 13:14
mm.h473.00 B02-09-04 13:14
sched.h13.25 kB02-09-04 13:14
sys.h5.41 kB02-09-04 13:14
tty.h3.93 kB02-09-04 13:14
signal.h4.01 kB02-09-04 13:14
stdarg.h1.77 kB02-09-04 13:14
stddef.h378.00 B02-09-04 13:14
string.h21.75 kB02-09-04 13:14
<sys>0.00 B04-10-07 15:01
stat.h2.37 kB02-09-04 13:14
times.h377.00 B02-09-04 13:14
types.h1.10 kB02-09-04 13:14
utsname.h423.00 B02-09-04 13:14
wait.h1.48 kB02-09-04 13:14
termios.h13.58 kB02-09-04 13:14
time.h1.81 kB02-09-04 13:14
unistd.h9.21 kB02-09-04 13:14
utime.h392.00 B02-09-04 13:14
<init>0.00 B04-10-07 15:01
main.c12.52 kB02-09-04 13:12
<kernel>0.00 B04-10-07 15:01
asm.s5.10 kB08-01-04 22:48
<blk_drv>0.00 B04-10-07 15:01
blk.h5.69 kB02-09-04 13:14
floppy.c23.49 kB02-09-04 13:12
hd.c17.14 kB02-09-04 13:12
ll_rw_blk.c7.59 kB02-09-04 13:12
Makefile4.25 kB08-01-04 22:53
ramdisk.c6.13 kB02-09-04 13:12
<chr_drv>0.00 B04-10-07 15:01
console.c30.91 kB02-09-04 13:12
keyboard.S21.04 kB08-01-04 22:59
Makefile4.81 kB08-01-04 22:59
rs_io.s5.75 kB08-01-04 22:59
serial.c2.91 kB02-09-04 13:12
tty_io.c18.40 kB02-09-04 13:12
tty_ioctl.c10.70 kB02-09-04 13:12
exit.c8.08 kB02-09-04 13:12
fork.c6.78 kB15-07-07 22:10
<math>0.00 B04-10-07 15:01
Makefile3.21 kB08-01-04 23:01
math_emulate.c2.08 kB02-09-04 13:12
mktime.c2.72 kB02-09-04 13:12
panic.c952.00 B02-09-04 13:12
printk.c1.75 kB02-09-04 13:12
sched.c18.57 kB16-07-07 21:23
signal.c5.61 kB02-09-04 13:12
sys.c7.62 kB02-09-04 13:12
system_call.s12.53 kB08-01-04 22:48
traps.c8.29 kB04-10-07 14:57
vsprintf.c9.96 kB02-09-04 13:12
<lib>0.00 B04-10-07 15:01
close.c397.00 B02-09-04 13:12
ctype.c1.72 kB02-09-04 13:12
dup.c401.00 B02-09-04 13:12
errno.c66.00 B02-09-04 13:12
execve.c607.00 B02-09-04 13:12
Makefile4.83 kB08-01-04 22:30
malloc.c13.50 kB02-09-04 13:12
open.c1.22 kB02-09-04 13:12
setsid.c382.00 B02-09-04 13:12
string.c199.00 B02-09-04 13:12
wait.c774.00 B02-09-04 13:12
write.c545.00 B02-09-04 13:12
_exit.c616.00 B02-09-04 13:12
Makefile8.58 kB08-01-04 22:21
<mm>0.00 B04-10-07 15:01
Makefile2.91 kB08-01-04 22:34
memory.c25.10 kB02-09-04 13:12
page.s842.00 B08-01-04 22:34
<tools>0.00 B04-10-07 15:01
build.c8.12 kB02-09-04 13:12
...
Sponsored links

unistd.h (286.77 kB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D