|
地板

楼主 |
发表于 2009-4-21 20:51:32
|
只看该作者
关于返回值
open() 返回的文件描述符一定是最小的未用的文件描述符。
由于一个进程在启动时自动打开了0,1,2三个文件描述符,因此,一般的运行一个程序去打开一个文件返回的文件描述符就为 3。
对于正常的一个简单的输入输出的程序:
#include <stdio.h>
int main()
{
int input;
printf("input a integer: ");
scanf("%d", &input);
printf("%d\\n", input);
return 0;
} 输入输出:beyes@linux-beyes:~/C> ./open2.exe
input a integer: 88
88 ---------------------------------------------------------------
如果在程序中一开始就关闭了 0 文件描述符会怎么样呢?
#include <stdio.h>
int main()
{
int input;
close(0); /* 关闭标准输入 */
printf("input a integer: ");
scanf("%d", &input);
printf("%d\\n", input);
return 0;
} 程序输出:beyes@linux-beyes:~/C> ./open2.exe
input a integer: -1208172000 由此可见,已经无法正常输入!
---------------------------------------------------------------
如果关闭标准输出:
#include <stdio.h>
int main()
{
int input;
close(1); /* 关闭标准输入 */
printf("input a integer: ");
scanf("%d", &input);
printf("%d\\n", input);
return 0;
} 那么容易看到,printf() 函数已经无法打印内容到屏幕了。
---------------------------------------------------------------
那么在应用 open() 例子中,先关闭掉标准输入( 关闭 0 文件描述符),看看怎么样:
#include <stdio.h>
#include <fcntl.h>
int main()
{
int file_desc;
close(0);
file_desc = open("test.txt", O_RDWR | O_CREAT, 0666);
printf("The file descriptor is: %d\\n", file_desc);
return 0;
} 程序输出:beyes@linux-beyes:~/C> ./open2.exe
The file descriptor is: 0 有此可见,创建新文件后,返回了 0 文件描述符,因为 0 这里被关闭后变成未用的当然也是最小的。
--------------------------------------------------------------- |
|