必胜高考网 > 计算机类 > 计算机等级 > 资讯 >

计算机等级考试C++学习杂记

时间: 未知2 资讯

  其中fcntl(int fields,int cmd,...)函数中的第一个参数,可以用字符型转整型函数atoi(argv[i])获得对参数的FD值,也可以通常定义一个int fd;然后利用open取得.故fcntl的示例如下:

  <1>.int fd=open("new.txt",O_RDONLY);

  if (fcntl(fd,F_GETFL,0)<0)...

  <2>.if (fcntl(atoi(argv[1],O_RDONLY)<0)...

  在steven的 这本书中,关于fcntl函数的运用中,有如下:

  #./a.out 0 < /dev/tty

  结果:read only

  #./a.out 1 >temp.foo

  结果:write only

  #./a.out 1

  结果:read write

  #./a.out 2 2>>temp.foo

  结果:write only,append

  #./a.out 5 5<>temp.foo

  结果:read write

  举个例子:

  (1).参数问题

  #./pro1 file1 file2>file3

  时,仅有pro1和file1传递给了pro1进程,分别作为argv[0],argv[1].

  而file2>file3由shell处理,在fork()之后,执行exec系统调用前,打开文件file3,并将文件file3的句柄复制到file2,

  并在exec时设置文件句柄file2打开.

  1>.所以以上执行时,#./a.out 1 >temp.foo,1是标准输出,表示STDOUT_FILENO,此时1的句柄被重定向写到一个文件中,所以

  结果正好是:write only. (temp.foo以只写方式打开)

  2>.执行#./a.out 1

  这个时候,由于0,1,2句柄都是指向你的登陆终端文件,而该终端是刻度写的,所以是read write.

  3>.执行#./a.out 2 2>>temp.foo

  时,shell在open temp.foo时,加了个APPEND标志,以表明是追加.

  4>.同样,执行#./a.out 5 5<>temp.foo时,<为读出,>为重定向输入,所以结果为:read write.

  3.文件共享

  UNIX系统支持在不同进程间共享打开的文件.内核使用三种数据结构表示打开的文件.

  <1>.每个进程在进程表中有一个记录项,记录项中包含有一张打开文件描述符表,可将其视为一个矢量,每 个描述符占用一项.

  <2>.内核为所有打开文件维持一张文件表.

  <3>.每个打开文件(或设备)都有一个V节点结构.

  4.解释 int main(int argc,char* argv[ ])中的参数涵义.

  其中argc是命令行参数个数.argv[]是命令行参数

  argv[0]是程序名,argv[1]是第一个参数,可以为一个文件名,一个字符串,或者一个数值.

  argv[2]是第二个参数,依此类推.

  比如有:#./program1 -e new.txt

  其有三个命令行参数,即argc=3

  argv[0]=program1

  argv[1]=-e

  argv[2]=new.txt

  一般若在程序中有:

  if(argc!=2) cout<<"Input parameter"<

  此处的判断用于检查是否输入了应该输入的参数.实际上在调用程序的时候,并不需要输入argc的值.

  argc的值是根据你运行程序时的参数个数来定的.

  5.若有int main(int argc,char* argv[])

  则argv在此表示一个字符串数组,由于[]里面的数目是不固定的,故可以指定为任意值。当在引用值时,如:

  string hhstr;

  hhstr=argv[1]; //正确

  hhstr=*argv[1]; //结果确不是一个字符串,而是字符串的第一个字母。

  6.string类型字符串不能赋值给char*的变量。

  7.该是指针参数的地方一定要用引用把地址传给它,或将指针传给它。

52764