上代码:
/* upper.c */
#include <stdio.h>
int main(void)
{
int ch;
while((ch = getchar()) != EOF) {
putchar(toupper(ch));
}
return 0;
}
终端输入:
upper的默认输出是终端,
gcc -g upper.c -o upper
./upper
便可以任意输入,以ctr c退出
文件管道输入;
touch file.txt
可以对file.txt输入任意字符串
终端输入./upper < file.txt
这是把file.txt通过管道作为输入端
STDIN_FILENO绑定:
STDIN_FILENO是一个打开文件句柄,对应的函数主要包插open/read/write/close等系统调用.
操作系统提共的API都是以文件描述符来表示文件(具体可学习ext2文件系统&&VFS),STDIN_FILENO就是标准输入设备,一般是键盘文件描述符,因为我们可以通过dup2将STDIN_FILENO绑定到新打开的文件描述符,实现自动化.
可再写一个包装器,
/*wrapper.c*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc,char* argv[])
{
int fd;
if(argc != 2)//参数是否正确
{
printf("please input the file path");
exit(1);
}
fd = open(argv[1],O_RDONLY);//以read only方式打开文件
if(fd < 0)//文件是否打开正确
{
printf("open file err");
exit(1);
}
dup2(fd,STDIN_FILENO);//dup2复制文件描述符
close(fd);//关闭fd
execl("./upper","upper",NULL);//execl执行,最后一个参数记得写NULL
perror("exec ./upper");
exit(1);//退出.
}
程序比较简单,但我们可以不断扩展,比如之前学习了fork,我们可以试想想能不能让子进程去打开并执行,
代码如下.
/*wrapper.c*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc,char* argv[])
{
int fd,pid;
if(argc != 2)
{
printf("please input the file path");
exit(1);
}
pid = fork();
if(pid < 0)
{
printf("fork failed");
}else if(pid == 0)
{
fd = open(argv[1],O_RDONLY);
if(fd < 0)
{
printf("open file err");
exit(1);
}
dup2(fd,STDIN_FILENO);
close(fd);
execl("./upper","upper",NULL);
perror("exec ./upper");
}else
{
//do nothing
}
exit(1);
}
分享到:
相关推荐
使用fork(),exec(),dup2(), pipe(),open()系统调用完成与下列shell命令等价的功能:grep -v usr | wc -l > result.txt
在linux中实现dup以及dup2,用C语言实现,里面有可执行文件,直接运行
此测试工具用于开发网络通讯程序时,在服务器或客户端测试TCP/UDP通讯连接和测试数据的接收和发送情况。 【软件功能】 1.可收发TCP/UDP数据。 2.对于TCP,支持服务器和客户端模式。 3.支持多连接,可同时对多路网络...
3.推荐喜欢自定义补丁颜色的朋友使用 cnhhkk 制作的 dUP2 的颜色辅助 设置工具 - dUP 2 Color Panel。 主页地址:http://cnhhkk.21windows.cn 镜像地址: http://vip.hanzify.org/tracky/dUP2ColorPanel.rar ...
详细介绍dup2函数用法,一看必懂.。。。
经典的补丁工具,破解领域很有名的哦!!!!
UNIX编程中的dup和dup2说明 UNIX编程中的dup和dup2说明
Linux系统编程——文件描述符的复制:dup()和dup2(),相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45870459
大牛路过别叨叨!专业破解。功能强大。灵活的利用dup/dup2可以给你带来很多强大的功能,花了一些时间总结出上面那么多,不知道自己理解的是否透彻,只能在以后的实践中慢慢探索了。
dup函数在系统编写程序的用法 及源代码
from command line, you input ./direction inputfile outputfile, to practice how to use dup() or dup2()
C语言dup()函数:复制文件描述词 头文件: #include 定义函数: int dup (int oldfd); 函数说明:dup()用来复制参数oldfd 所指的文件描述词, 并将它返回. 此新的文件描述词和参数oldfd 指的是同一个文件, 共享...
DUP-414中文驱动,希望能有需要的同学
dup2.exedup2即diablo2oo2's Universal Patcher,本版本为简体中汉化版,它是一款非常好用的补丁制作工具,功能强大,编辑后可以即时生成补丁或生成Loader,你可以根据需要来自定义设置皮肤,生成的补丁体积很小,...
vb.net dup通信,含打洞技术,很有用,提供给大家学习。
dUP(diablo2oo2’s Universal Patcher)可以说是当今补丁制作工具的王者,dUP工具的强大就在于他可以满足你所能够想到的对文件的修改方式。当你对免费有一定了解之后,建议你来体验一下dUP的过人之处。diablo2oo2s ...
dup2 to create loader for game
dUP v2.17 Beta 23 汉化版 by tracky
我经常用的东西很好用 支持偏移量补丁 内存补丁 文件补丁