当前位置:  技术问答>linux和unix

●●● 【请问怎么用C语言 为shell写 “重定向”功能?】 ●●●

    来源: 互联网  发布时间:2015-12-15

    本文导语:  ////////////////////////////////////////////////////////////////// 请问怎么用C语言 为shell写 “重定向”功能? 就是用  , 和 >> 提示输入输出。 freopen()应该可以,但我没有成功, 请给个C语言得代码例子吧。 万分感谢、 ////////////////...


//////////////////////////////////////////////////////////////////

请问怎么用C语言 为shell写 “重定向”功能?

就是用  , 和 >> 提示输入输出。


freopen()应该可以,但我没有成功, 请给个C语言得代码例子吧。


万分感谢、


//////////////////////////////////////////////////////////////////

|
这是一个pipe的例子, 父进程往管道中写数据,子进程从管道中读出数据.
#include 
#include 
#include 
/* Write COUNT copies of MESSAGE to STREAM, pausing for a second
between each. */
void writer (const char* message, int count, FILE* stream)
{
for (; count > 0; --count) {
/* Write the message to the stream, and send it off immediately. */
fprintf (stream, “%sn”, message);
fflush (stream);
/* Snooze a while. */
sleep (1);
}
}
/* Read random strings from the stream as long as possible. */
void reader (FILE* stream)
{
char buffer[1024];
/* Read until we hit the end of the stream. fgets reads until
either a newline or the end-of-file. */
while (!feof (stream)
&& !ferror (stream)
&& fgets (buffer, sizeof (buffer), stream) != NULL)
fputs (buffer, stdout);
}
int main ()
{
int fds[2];
pid_t pid;
/* Create a pipe. File descriptors for the two ends of the pipe are
placed in fds. */
pipe (fds);
/* Fork a child process. */
pid = fork ();
if (pid == (pid_t) 0) {
FILE* stream;
/* This is the child process. Close our copy of the write end of
the file descriptor. */
close (fds[1]);
/* Convert the read file descriptor to a FILE object, and read
from it. */
stream = fdopen (fds[0], “r”);
reader (stream);
close (fds[0]);
}
else {
/* This is the parent process. */
FILE* stream;
/* Close our copy of the read end of the file descriptor. */
close (fds[0]);
/* Convert the write file descriptor to a FILE object, and write
to it. */
stream = fdopen (fds[1], “w”);
writer (“Hello, world.”, 5, stream);
close (fds[1]);
}
return 0;
}

|
#include 
#include 

int main(int argc, char* argv[])
{
    FILE *stream ;

    if((stream = freopen("file.txt", "w", stdout)) == NULL)
        exit(-1);

    printf("this is stdout outputn");

}

|
C语言有对应的Pipe API,
例如:
int pipe_fds[2];
int read_fd;
int write_fd;
pipe (pipe_fds);
read_fd = pipe_fds[0];
write_fd = pipe_fds[1];
你可以到网上找相关知识.

|
UP有分,就UP一下

|
不太明白楼主的意思,shell本身就有重定向,为什么要用c为shell写?

|
就是啊,你可以把你的问题说得再清楚一点嘛?

    
 
 

您可能感兴趣的文章:

  • 请问哪里有ubuntu 9.0版本的中文语言包和KDE的中文语言包下载,我用Google搜索了很多地方都没有!
  • 请问如何在C语言中嵌入的shell脚本中获得C语言程序中定义的某个变量
  • 请问怎么改变默认的语言?
  • 请问大侠学java要有c语言基础吗?
  • 请问如何才能让REDHAT 7.3的省缺语言变成英文。
  • 请问怎样才能看到JavaScript原来的脚本语言?
  • 请问《软件工程java语言实现》一书在那里能下载
  • 请问高级程序员有没有考java语言的?
  • 请问unix终端的光条式菜单程序是用什么语言开发的?谢谢
  • 请问,怎样用C语言连接SQL2000数据库?
  • 请问要开发一种网络电话,要会什么编程语言?
  • C语言是有函数组成 那Java是由什么组成的 ------类 ? 请问
  • 请问在UNIX系统下C语言中的数据类型转换的问题
  • ~~~请问哪里有Linux下的C语言函数参考手册,最好是英文版的~~~
  • 请问那里有c语言的编译器源代码啊?
  • 请问有没有用AT&T汇编语法讲汇编语言的书?
  • 请问怎样用C语言写一个SHELL
  • 请问ubuntu自动更新的语言包放到那个文件夹下
  • 请问学那种语言最有钱途呢?JAVA如何?
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 请问在linux下面,有没有硬盘整理的功能,或者有什么软件可以实现硬盘整理的功能?
  • 请问shell能实现注册的功能吗?
  • 请问在红旗Linux多功能服务器版上(不是数据库服务器版)能否正常安装使用Oracle?红旗Linux数据库服务器版要比红旗Linux多功能服务器版贵
  • 请问Apache的主要功能是身摸?
  • 请问什么是J2EE?其功能如何?
  • 请问如何在JTextPane里实现画表格的功能,就想word那样!!!!
  • 请问???我如何可将tomcat爆露目录的功能给去掉???
  • 请问Unix中提供类似于Win2000的Dfs功能么?
  • 请问Linux中提供类似于Win2000的Dfs功能么?
  • 请问Linux下有没有类似Windows光盘Autorun的功能?
  • 请问 Ubuntu 7.10 server 是否支持自动待机功能
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • 请问“当前shell”和“子shell”的区别?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 请问什么是shell编程?一般都用shell编程实现什么?
  • 请问,Shell中如何执行另外一个Shell脚本?
  • 请问 怎么样在C中调用一个 shell,得到shell中一个参数的值
  • 请问大家shell属于守护进程吗?
  • 请问什么是shell?
  • 请问:C语言中system怎样调用shell,谢谢!急!!!!!
  • 请问在 redhat 8 kde 下面写 shell 文件怎么不能双击运行?
  • 请问linux下怎么进shell编程环境?
  • 请问在shell脚本里怎样获得文件的大小?
  • 请问交互的、不交互的shell有什么区别?
  • 请问如何在C语言中获得shell 变量
  • 请问: 怎么把jsp中用户的输入做为参数传递给shell script?!!!!!!!!
  • 请问如何在shell脚本中设置环境变量?
  • 请问怎样在awk里调用shell变量?
  • 请问一个shell中有关数据格式转化的问题
  • 请问在shell如何实现字符串子串运算
  • 请问:怎么调用shell脚本
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3