Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 文件描述符表-父/子共享它_C_Unix_Posix - Fatal编程技术网

C 文件描述符表-父/子共享它

C 文件描述符表-父/子共享它,c,unix,posix,C,Unix,Posix,我试图创建一个示例(帮助我理解以下概念): 子进程继承其父进程打开的文件。 可以在这个图中看到 这是我的代码: FILE* f = fopen("test.txt", "r"); if(fork()==0){ printf("%c", fgetc(f) ); //should print e printf("%c", fgetc(f) ); //should print s printf("%c", fgetc(f) ); //should print t

我试图创建一个示例(帮助我理解以下概念):

子进程继承其父进程打开的文件。 可以在这个图中看到

这是我的代码:

 FILE* f = fopen("test.txt", "r");

 if(fork()==0){

    printf("%c",  fgetc(f) ); //should print e
    printf("%c",  fgetc(f) ); //should print s
    printf("%c",  fgetc(f) ); //should print t
    printf("\n");
 } else {
    printf("%c",  fgetc(f) ); // print t

 }
test.txt包含单词
test

假设父级先运行,如果父级和子级具有相同的描述符表,系统输出不应该
t(来自父级)est(来自子级)
。当前输出为
t▒▒▒▒

谢谢
daniel

C stdio库使用缓冲来提高效率。即使您只读取一个字符,函数也会从文件中读取整个缓冲区。对于这样一个小文件,这意味着调度的进程首先会完全读取它

您可以通过调用
setvbuf
禁用缓冲。或者,您可以使用直接在文件描述符上操作的函数(
open
read