APUE习题3.5

比较 ./a.out  >  outfile  2> &1 和 ./a.out  2> &1  >  outfile 的区别,回答这个问题只要把笔记“shell脚本->输入输出重定向”中提到的输出重定向的本质给搞清楚就可以了,下面解析这个问题。

先分析 ./a.out  >  outfile  2> &1 ,shell命令是从左向右执行的,首先是将标准输出重定向到文件outfile中,再是将标准错误重定向到标准输出,从文件描述符层面来看首先是代表标准输出的文件描述符 1 指向了文件outfile的文件表项,而代表标准错误的文件描述符 2 指向了文件描述符 1 指向的文件表项,也就是说 文件描述符 1 和 2 都指向了outfile的文件表项。

分析 ./a.out  2> &1  >  outfile ,首先标准错误重定向到标准输出,接着标准输出重定向到文件outfile,从文件描述符层面上来看首先代表标准错误的文件描述符 2 指向了文件描述符 1 指向的文件表项(此刻是显示器的设备文件),接着代表标准输出的文件描述符 1 指向了outfile文件的文件表项,所以文件描述符 1 和 2指向的是不同的文件表项,1 指向的是outfile文件表项,而文件描述 2 指向的是显示器的设备文件。

时间: 2024-11-06 21:43:29

APUE习题3.5的相关文章

APUE习题3.2以及shell中重定向符号的使用

习题3.2的要求是不使用fcntl()而编写一个同dup2()功能相同的函数.直觉上是不断使用dup()直到返回指定的文件描述符. #include <stdio.h>#include <stdlib.h>#define OPEN_MAX 63 int my_dup2(int filedes,int filedes2); intmain(int argc, char* argv[]){  int fd,fd2;  char buf[] = "It work!\n"

APUE习题8.7

看书的时候发现这个习题没有答案,于是就想把自己做的结果贴上来,和大家分享分享! 首先把题目贴上来吧: /*********** 8.10节中提及POSIX.1要求在调用exec时关闭打开的目录流.按下列方法对此进行验证,对根目录调用opendir,查看在你的系统上实现的DIR结构,然后打印执行时关闭标志.接着open同一目录读取并打印执行时关闭标志 ***********/ 首先说,关于执行时关闭标志的作用,JesseEisen的这篇博客已经讲解的非常好了,(传送门在这里)我就不在这里献丑了,我

APUE习题3.2----自己实现的dup2( )函数的源码

原 dup2()函数: #include <unistd.h> int dup2( int fd, int fd2 ); 对于 dup2,可以用 fd2 参数指定新描述符的值.如果 fd2 已经打开,则先将其关闭.如若 fd 等于 fd2,则 dup2 返回 fd2,而不关闭它.否则,fd2 的 FD_CLOEXEC 文件描述符标志就被清除,这样 fd2 在进程调用 exec 时是打开状态.该函数返回的新文件描述符与参数 fd 共享同一个文件表项. 下面是自己实现的 dup2函数: #incl

APUE习题4.6源代码----实现自己的简易 cp 命令

原题: 编写一个类似 cp 的程序,它复制包含空洞的文件,但不将字节0写到输出文件中去. 源代码: #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #define BUF_SIZ 128 int my_cp( const char *file1, const char *file2 ) { int f

APUE习题4.6---测试lseek作用

原题:如果使用追加标志打开一个文件以便读.写,能否仍用 lseek 在任一为止开始读?能否用 lseek 更新文件中任一部分的数据? 验证程序如下: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #define BUF_SIZ 32 int main() { int fd; int res; off

APUE习题3.6

如果在打开文件的时候加上了追加标志(O_APPEND),那么是否可以利用lseek函数来实现对文件在任意位置的读.写操作? 回答:可以实现任意位置的读操作,但是不可以实现任意位置的写操作.如果添加了O_APPEND标志,那么每次写操作的时候都会追加到文件末尾,而对读操作没有影响.

Implementing Software Timers - Don Libes

在看APUE习题10.5的时候提示了这篇文章,讲的非常清晰,设计也非常巧妙,所以把原文放在这里.值得自己去实现. Title: Implementing Software Timers By: Don Libes Originally appeared in the Nov. 1990 "C User's Journal" and is also reprinted as Chapter 35 of "Obfuscated C and Other Mysteries"

文件IO 练习题

3.1 当读/写磁盘文件时,本章中描述的函数是否具有缓冲机制?请说明原因. 3.1 所有的磁盘 I/O 都要经过内核的块缓冲区(也称为内核的缓冲区高速缓存),唯一例 外的是对原始磁盘设备的 I/O,但是我们不考虑这种情况.Bach[1986]的第 3 章描述 了这种缓冲区高速缓存的操作.既然 read 或 write 的数据都要被内核缓冲,那么术 语“不带缓冲的 I/O”指的是用户的进程中对这两个函数不会自动缓冲,每次 read 或 write 就要进行一次系统调用. 3.2 编写一个与 3.1

【转】《APUE》第三章笔记(4)及习题3-2

原文网址:http://www.cnblogs.com/fusae-blog/p/4256794.html APUE第三章的最后面给出的函数,现在还用不着,所以,先留个名字,待到时候用着了再补上好了. dup和dup2函数:用来复制文件描述符的 sync函数,fsync函数和fdatasync函数:大致的功能是将缓冲区的数据刷进队列中,等待写入到硬盘中. fcnti函数:可以改变已打开文件的性质. ioctl函数:控制设备. 习题: 1.当读/写磁盘文件时,本章中描述的函数是否有缓冲机制?请说明