Chinaunix首页 | 论坛 | 博客
  • 博客访问: 357195
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: C/C++

2007-05-14 13:43:17

5、低级IO

  1open系统调用

     openname,rwmode):返回一个文件描述符,rwmode0/1/2(读//读写);

  2create系统调用

     create(name,perms):创建一个文件,可能重写已经存在的文件(清零)。perms0755.

  3read系统调用

     read (fd,buf,n):返回实际读取的字节数;

  4write系统调用

     write(fd,buf,n)

  5)随机访问lseek

     lseek(fd,offset,origin):将文件fd的当前读写位置移动到offset处,它是offset相对于

origin所指定的位置计算得出的实际位置。Origin可以是0/1/2,分别说明相对于文件的

开始、当前位置、结尾处开始移动,返回值是新的绝对位置。若出错返回-1

例如:pos=lseek(fd,0L,l).取得当前位置。

 

6I节点相关

文件stat.h中定义了stat结构来说明I节点的结构。可以利用系统调用statfstat来取

得文件的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给进程。该报警信号可用来确保在一定时间内发生一些事情:如果发生了,报警信号就可以关闭;如果没有,程序就可以捕获报警信息后重新获得控制。

阅读(986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~