k*f
4 楼
换stdout的时候,需要fflush的。把之前的东西刷出去。
从来没有用过open/dup2
我就是用:fopen造个FILE*
FILE*old_stdout=stdout
stdout=那个FILE*
blahblah....
fflush(stdout);
stdout=old_stdout;
【在 B********s 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 帮忙看看这段代码为什么不能把输出重定向到屏幕?
: int main()
: {
: int fdout;
: fdout = open("a",O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
: dup2(fdout,STDOUT_FILENO);
: printf("hehe\n");
: dup2(1,STDOUT_FILENO);
: printf("haha\n");
: return 0;
从来没有用过open/dup2
我就是用:fopen造个FILE*
FILE*old_stdout=stdout
stdout=那个FILE*
blahblah....
fflush(stdout);
stdout=old_stdout;
【在 B********s 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 帮忙看看这段代码为什么不能把输出重定向到屏幕?
: int main()
: {
: int fdout;
: fdout = open("a",O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
: dup2(fdout,STDOUT_FILENO);
: printf("hehe\n");
: dup2(1,STDOUT_FILENO);
: printf("haha\n");
: return 0;
t*t
5 楼
他这段问题不在这里(因为stdout缺省是line buffered)
我假设他STDOUT_FILENO=1
那么他作的是
dup2(fdout, 1)
...
dup2(1,1)
...
这就好象写:
a1=a_fdout;
// use a1 as a_fdout
a1=a1;
// trying to recover previous a1
这显然不make sense...
【在 k****f 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 换stdout的时候,需要fflush的。把之前的东西刷出去。
: 从来没有用过open/dup2
: 我就是用:fopen造个FILE*
: FILE*old_stdout=stdout
: stdout=那个FILE*
: blahblah....
: fflush(stdout);
: stdout=old_stdout;
我假设他STDOUT_FILENO=1
那么他作的是
dup2(fdout, 1)
...
dup2(1,1)
...
这就好象写:
a1=a_fdout;
// use a1 as a_fdout
a1=a1;
// trying to recover previous a1
这显然不make sense...
【在 k****f 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 换stdout的时候,需要fflush的。把之前的东西刷出去。
: 从来没有用过open/dup2
: 我就是用:fopen造个FILE*
: FILE*old_stdout=stdout
: stdout=那个FILE*
: blahblah....
: fflush(stdout);
: stdout=old_stdout;
c*x
8 楼
Things look more complicated than they appears,
The call:
fid = dup2(fildes, fildes2);
is equivalent to:
close(fildes2);
fid = fcntl(fildes, F_DUPFD, fildes2);
When you "dup2(fdout,STDOUT_FILENO);" you close the stdout, no way
you can use 1 to reopen it.
The call:
fid = dup2(fildes, fildes2);
is equivalent to:
close(fildes2);
fid = fcntl(fildes, F_DUPFD, fildes2);
When you "dup2(fdout,STDOUT_FILENO);" you close the stdout, no way
you can use 1 to reopen it.
相关阅读
ATOM果然是现在除了vi最好的editor.大赞,可以算是light ide. full fledged editor一地这书有人看过么?如何 Big Data: Principles and best practices of scalable realtimeangular2里面怎么import第三方包?java这么多年还没有c++那种auto keyword呢,jvm工程师在吃屎?各位好奇,我怎么和goodbug结的梁子swift行情很好啊作业提交和批阅系统老魏,我觉得你要做就全套一起做面试纠着问spring是不是很傻逼? (转载)每个人应正视自己的人性framework7json web token (jwt) 不能revoke,放cookie有啥缺点?码工还是必须要有自己的武装组织Node.js question: webpage always defaults to index.htmldart for ios and androiddigital ocean没有ms sql, oracle,难怪比aws便宜。Haskell这种不作不死的典型HOW TO DELETE IN KEY-VALUE STOREAngular2 + Web Component