当前位置: 技术问答>linux和unix
linux笔试题,有什么问题
来源: 互联网 发布时间:2016-06-25
本文导语: main() { int fd = open("1.txt",O_CREAT|O_WRONLY); if(0 = fork()) { close(fd); ....... } .... close(fd); } 程序中两次close(fd),是否会产生问题,为什么? | man fclose 的描述就可以知道:“fclose 两次”导致的...
main()
{
int fd = open("1.txt",O_CREAT|O_WRONLY);
if(0 = fork())
{
close(fd);
.......
}
....
close(fd);
}
程序中两次close(fd),是否会产生问题,为什么?
{
int fd = open("1.txt",O_CREAT|O_WRONLY);
if(0 = fork())
{
close(fd);
.......
}
....
close(fd);
}
程序中两次close(fd),是否会产生问题,为什么?
|
man fclose 的描述就可以知道:“fclose 两次”导致的结果是一个未定义行为(undefined behaviour)。
未定义行为顾名思义就是标准没有对其作出具体规定的行为。比如“fclose 两次”其行为就是一个未定义行为。
对于未定义行为,标准允许编译器可以任意定义一个具体实现,因此这样的行为其结果不是确定的。比如对于上述未定义行为,其具体实现可以是:fclose函数返回错误码、出现段错误程序终止、或者任何其它可能的实现。
由于未定义行为会使程序出现不确定的运行结果从而达不到程序的预定目的,所以这不是我们所希望出现的。因此,一定不要让未定义行为出现在程序中,这是程序员的一个基本职责。比如,“fclose 两次”这个行为会导致未定义行为,那么在程序中就绝对要避免出现“fclose 两次”这样的错误。
对于程序员来说,导致未定义行为产生的行为(如“fclose 两次”)其实就是标准的禁止事项。如果未定义行为在程序中出现了,说明这个程序违反了标准的规定,是非法程序
未定义行为顾名思义就是标准没有对其作出具体规定的行为。比如“fclose 两次”其行为就是一个未定义行为。
对于未定义行为,标准允许编译器可以任意定义一个具体实现,因此这样的行为其结果不是确定的。比如对于上述未定义行为,其具体实现可以是:fclose函数返回错误码、出现段错误程序终止、或者任何其它可能的实现。
由于未定义行为会使程序出现不确定的运行结果从而达不到程序的预定目的,所以这不是我们所希望出现的。因此,一定不要让未定义行为出现在程序中,这是程序员的一个基本职责。比如,“fclose 两次”这个行为会导致未定义行为,那么在程序中就绝对要避免出现“fclose 两次”这样的错误。
对于程序员来说,导致未定义行为产生的行为(如“fclose 两次”)其实就是标准的禁止事项。如果未定义行为在程序中出现了,说明这个程序违反了标准的规定,是非法程序
|
fd 在子进程里是共享的 这个跟普通的变量是不一样的