linux下将终端的输入存入文件中
代码很简单:
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> int main(int argc, char **argv)
{
int fd;
fd = open("sam1", O_RDWR|O_CREAT|O_APPEND, S_IRWXU);
printf("please input:");
char *tmpc = (char *)malloc(sizeof(char));
//scanf("%s", tmpc);
scanf("%[^\n]", tmpc);
int size = strlen(tmpc);
printf("you input: %s and size:%d\n", tmpc, size);
write(fd, tmpc, strlen(tmpc));
write(fd, "\n", ); int tmp = close(fd); return ;
}
这里唯一的一个坑就是:第13行的scanf函数不能接受有空格的字符串,让我郁闷了一上午,终于搞定了。原来,是sanf()函数在接收字符串时,遇到空格就会停止接收。可以使用gets()函数代替,但也可以用以下方式解决:
这里主要介绍一个参数,%[ ],这个参数的意义是读入一个字符集合。[ ]是个集合的标志,因此%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是“^”,这说明读取不在“^“后面集合的字符,即遇到”^“后面集合的字符便停止。此时读入的字符串是可以含有空格的。(\n 表示换行符)
因此形成了第14行的代码了。
下面代码将上边存储的文本全部读取出来:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAX_LINE 1024 int main(int argc, char **argv)
{
char buf[MAX_LINE];
FILE* fd = fopen("sam1", "r");
while(fgets(buf, MAX_LINE, fd) != NULL){
int len = strlen(buf);
buf[len - ] = '\0';
printf("%s %d \n", buf, len - );
} return ;
}
同学们,请自行尝试,有问题请留言。
改造代码如下:
readFile.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAX_LINE 1024 int main(int argc, char **argv)
{
if(argc < ){
printf("Error!\n");
}
char buf[MAX_LINE];
FILE* fd = fopen(*(argv + ), "r");
while(fgets(buf, MAX_LINE, fd) != NULL){
int len = strlen(buf);
buf[len - ] = '\0';
//printf("%s %d \n", buf, len - 1);
printf("%s\n", buf);
} return ;
}
writeFile.c
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> int main(int argc, char **argv)
{
if(argc < ){
printf("Error!\n");
}
int fd;
fd = open(*(argv + ), O_RDWR|O_CREAT|O_APPEND, S_IRWXU);
printf("please input:");
char *tmpc = (char *)malloc(sizeof(char));
//scanf("%s", tmpc);
int tmpp = gets(tmpc);
int size = strlen(tmpc);
printf("you input: %s and size:%d\n", tmpc, size);
write(fd, tmpc, strlen(tmpc));
write(fd, "\n", ); int tmp = close(fd); return ;
}
改造后的代码,需要指出需要使用的文件名称而已,更加具有普遍性。
linux下将终端的输入存入文件中的更多相关文章
- linux下find查找与批量替换文件中指定内容
经常在部署tomcat时需要替换配置文件中的ip,find命令批量替换还是很方便的 查找需要替换的ip,看看哪些文件有配置这个ip,执行下面命令: find ./ -type f -regex &qu ...
- linux下如何批量替换多个文件中的某个字符串?
答: sed -i "s/<old_string>/<new_string>/g" `grep "<old_string>" ...
- 调皮捣蛋的Linux下有趣终端的合集
*本文作者:国光,转载自 FreeBuf.COM,原文地址:https://www.freebuf.com/news/144050.html 前言 刚开始接触Linux的我们,肯定认为Linux系统就 ...
- 完美解决 Linux 下 Sublime Text 中文输入
首先,我参考了好几篇文章,都是蛮不错的,先列出来: sublime-text-imfix:首先推荐这个方法,最简单,但是在我的系统上有些问题.可用这个的强烈推荐用这个 完美解决 Linux 下 Sub ...
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- linux下c通过虚拟地址映射读写文件的代码
在代码过程中中,把开发过程中比较好的一些代码片段记录起来,如下的代码内容是关于 linux下c通过虚拟地址映射读写文件的代码,应该对小伙伴有些好处.#include<stdio.h>#in ...
- Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50
Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50 分类: 系统运维 查找包含BOM头的文件,命令如下: 点击(此处)折叠或打开 grep -r -I -l ...
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- linux下使用split 来分割大文件
linux下使用split 来分割大文件 2010-07-27 15:46:27| 分类: 技术文稿 | 标签:split 分割 linux |字号 订阅 平常都是使用ssh来进行远程 ...
随机推荐
- Java自学-类和对象 方法重载
什么是Java 方法重载 方法的重载指的是方法名一样,但是参数类型不一样 步骤 1 : attack方法的重载 有一种英雄,叫做物理攻击英雄 ADHero 为ADHero 提供三种方法 public ...
- ningx配置本地https环境
由于项目改成了https访问,所以本地开发的时候也要通过https验证,避免页面发送http请求. 例如原来是这样访问:http://192.168.88.88:8080/ 或 http://loca ...
- MySQL Charset--UTF8和UTF8MB4对比测试
UTF8和UTF8MB4 在早期MySQL版本中,使用只支持最长三字节的UTF8字符集便可以存放所有Unicode字符.随着Unicode的完善,Unicode字符集收录的字符数量越来越多,最新版本的 ...
- 免费的天气API测试接口
网上几乎所有的天气接口都需要注册key,然后还各种频率限制,每天调用次数才几百次? 太坑爹了吧 一个简单的天气预报功能, 为什么要搞的这么复杂, 收什么费? 推荐一个真正免费的天气API接口, 返回j ...
- redis基本操作使用
连接redis [root@master src]# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name root O ...
- Java-最常用的Java日志框架整理
Java-最常用的Java日志框架整理 前言 Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用以及移动应用.然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日 ...
- rsa公钥和私钥到底哪个才是用来加密,哪个用来解密?
本文转自:91博客:原文地址:http://www.9191boke.com/138589019.html 公钥和私钥在一些银行系统.第三方支付系统SDK中经常会遇到,刚接触公钥私钥的朋友们估计很难区 ...
- Pods
Pods Pod概念 Pod是kubernetes集群应用中的创建和部署的最小.最简单的kubernetes对象模型单元的基本执行单元.Pod表示在集群中运行的进程. Pod 封装了应用程序的容器(一 ...
- 基于tornado---异步并发接口
1.目的 由于有多个程序和脚本需要对mysql进行读写数据库,每次在脚本中进行数据库的连接.用cursor进行操作过于麻烦,因此希望可以有一个脚本开放接口,只需要传入sql语句,就可以返回结果回来.因 ...
- centos6.5安装crmsh
CentOS默认没有crmsh的yum源,因此可以借用OpenSUSE的源(OpenSUSE的包也是rpm). 操作步骤很简单首先先进入yum源的安装目录,下载repo配置文件,(返回原工作目录,)执 ...