分类: C/C++
2007-05-14 13:43:17
5、低级IO
1)open系统调用
open(name,rwmode):返回一个文件描述符,rwmode为
2)create系统调用
create(name,perms):创建一个文件,可能重写已经存在的文件(清零)。perms如0755.
3)read系统调用
read (fd,buf,n):返回实际读取的字节数;
4)write系统调用
write(fd,buf,n)
5)随机访问lseek
lseek(fd,offset,origin):将文件fd的当前读写位置移动到offset处,它是offset相对于
origin所指定的位置计算得出的实际位置。Origin可以是
开始、当前位置、结尾处开始移动,返回值是新的绝对位置。若出错返回-1。
例如:pos=lseek(fd,
6、I节点相关
文件stat.h中定义了stat结构来说明I节点的结构。可以利用系统调用stat和fstat来取
得文件的I节点信息。
如: char *name;
int fd;
struct stat stbuf;
stat(name,&stbuf); //读取文件
fstat(fd,&stbuf); //读取文件描述符指针
7、进程相关
execlp(“date”,”date”,(char *)0);
第一个参数是命令的文件名,第二个及其后继参数是命令名和命令的参数。最后一个参数用0
参数作为标识;它调用一个新程序覆盖正在运行的程序,运行该程序,然后退出。只有发生错误时,
原先的程序才能重新获得控制。
execvp(filename,argp);
与上个系统调用相似。Argp是它的变体参数列表,列表中最后一个参数指针必须是NULL。
fork()调用
在子进程中,fork返回值为0,在父进程中,返回值是子进程的标识符;
wait调用
用法:wait(&status)。返回要等待结束的进程标识符,或者-1。
它返回的status的低8位,被系统用来表示子进程的退出状态,它为0表示正常终止,非0表示
出现了某种问题,次高8位取自调用exit的参数或者main函数的返回值;
当进程的输入输出重定向时,可以将它们连接到“/dev/tty”来重新绑定到终端;
dup(fd)系统调用
在最低序号的未分配的文件描述符上复制文件描述符fd,返回指向相同打开文件的一个新的文件
描述符。下例将标准输入连接到一个文件:
int fd;
fd=open(“file”,0);
close(0);
dup(fd);
close(fd);
8、信号和中断
所有定义在文件signal.h中。
系统调用signal改变缺省的动作,它有两个参数,第一个是一个数字,用于说明信号。第二个参数或者是一个函数的地址,或者是一段代码。该代码要么要求信号被忽略,要么给出缺省的处理。如
signal(SIGINT,SIG_IGN):将使终端被忽略;
signal(SIGINT,SIG_DFL):恢复缺省的处理;
在所有情况下,该调用返回前一个信号值。
如果想截获中断,解释终端请求的内容,并返回到程序本身的命令处处理循环,可以使用setjump函数。它在setjump.h中定义。可在要返回处这样:
jmp_buf sjbug;
….
setjmp(sjbuf);
…
longjmp(sjbuf,0);
在setjmp.h中定义了jmp_buf对象,该对象保存了栈的位置。变量的值没有被保存。
另外,当信号发生以后,需要重新设置信号处理。因为信号发生时,会自动重置信号的缺省处理状态。
9、报警
系统调用alarm(n)会在n秒后发送一个信号SIGALRM给进程。该报警信号可用来确保在一定时间内发生一些事情:如果发生了,报警信号就可以关闭;如果没有,程序就可以捕获报警信息后重新获得控制。