『Shell编程』学习记录(2)
例1.文件io
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int main(int argc, char **argv) {
- printf("%s\n",argv[]);
- int fdt,fds;
- char buf[];
- int num = ;
- if ((fds = open("/etc/profile",O_RDONLY)) < ) {
- printf("open fail\n");
- }
- if ((fdt = open(argv[],O_CREAT|O_TRUNC|O_RDWR) < ) {
- printf("open fail\n");
- return ;
- }
- while () {
- if ((num = read(fds,buf,)) < ) {
- printf("read fail\n");
- }
- if (write(fdt,buf,num) < ) {
- printf("write fail\n");
- return ;
- }
- if (num != ) {
- break;
- }
- }
- close(fds);
- close(fdt);
- return ;
- }
① 这些常数的定义,在/usr/include/bits/fcntl.h
- #define O_ACCMODE 0003
- #define O_RDONLY 00
- #define O_WRONLY 01
- #define O_RDWR 02
- #define O_CREAT 0100 /* not fcntl */
- #define O_EXCL 0200 /* not fcntl */
- #define O_NOCTTY 0400 /* not fcntl */
- #define O_TRUNC 01000 /* not fcntl */
- #define O_APPEND 02000
- #define O_NONBLOCK 04000
- #define O_NDELAY O_NONBLOCK
- #define O_SYNC 010000
- #define O_FSYNC O_SYNC
- #define O_ASYNC 020000
可以看出,每个常数都对应一位。所以按位或得到的值,每多或上一个常数,就是把对应的一位置1。
O_TRUNC
在open()
应首先删除文件中的内容,然后开始编写。
file.txt中包含ASCII '11',它应该做的是读取它并将其覆盖为'8',文件最终为'8'。
代码的目标是读取文件中的数字,将其减3,然后仅使用系统调用将该数字放回文件中。
- #include <unistd.h>
- #include <fcntl.h>
- int main(int argc, char*argv[]){
- int fp = open("file.txt", O_RDONLY);
- char c1, c2, c3='\n';
- read(fp, &c1, );
- read(fp, &c2, );
- close(fp);
- fp = open("file.txt", O_TRUNC | O_WRONLY);
- if (c2 == '\n')
- c1 -= ;
- else {
- if (c2 >= '' && c2 <= '' ) {
- c1--;
- c2 += ;
- }
- else
- c2 -= ;
- }
- if (c1 != '')
- write(fp,&c1,);
- if (c2 != '\n')
- write(fp,&c2,);
- write(fp,&c3,);
- return ;
- }:
②
- void open (const char* filename,
- ios_base::openmode mode = ios_base::in | ios_base::out);
对filename进行后面的操作组合
参考:http://www.cplusplus.com/reference/fstream/basic_fstream/open/
例程的功能是将 /etc/profile 文件每20个字节进行读取到 arg[1] (没有则重新创建,有则进行内容覆盖)文件中。
例2.进程间通信
- #include <unistd.h>
- #include <sys/types.h>
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main(int argc, char **argv) {
- int pipe_fd[];
- pid_t pid;
- char buf_r[];
- char* p_wbuf = "hello world!";
- int r_num = ; memset(buf_r, , sizeof(buf_r));
- if (pipe(pipe_fd) < ) {
- printf("pipe create error\n");
- return -;
- }
- if ((pid = fork()) == ) {
- close(pipe_fd[]);
- sleep();
- if ((r_num = read(pipe_fd[], buf_r, )) > ) {
- printf("%d numbers read from the pipe is \" %s \"\n", r_num, buf_r);
- }
- close(pipe_fd[]);
- exit();
- }
- else if (pid > ) {
- close(pipe_fd[]);
- if (write(pipe_fd[], p_wbuf, strlen(p_wbuf)) != -) {
- printf("parent write \" %s \" success!\n", p_wbuf);
- }
- close(pipe_fd[]);
- sleep();
- waitpid(pid, NULL, );
- exit();
- }
- }
①
- void * memset ( void * ptr, int value, size_t num );
将ptr指的内存的num个字节用value设置set。
- /* memset example */
- #include <stdio.h>
- #include <string.h>
- int main ()
- {
- char str[] = "almost every programmer should know memset!";
- memset (str,'-',);
- puts (str);
- return ;
- }
Output:
|
②
pipe(filedes)的功能: 建立一无名管道。管道建立后,写进程将数据写入文件 filedes[1],读进程 从文件 filedes[0]中读数据,从而实现读/写进程的管道通信。
例程的功能是将p_wbuf指向的100个内存单元通过pipe传给buf_r[100]。
『Shell编程』学习记录(2)的更多相关文章
- 『Shell编程』学习记录(1)
例1. $ cat ex1 date pwd cd .. $ bash ex1 # 运行,显示当前日期和当前目录,但没有执行返回上级目录,因为执行的时候终端会产生一个子shell(类似于C语言调用函数 ...
- 『C编程』学习笔记(1)
size_t类型详解: #include <cstddef> #include <iostream> #include <array> int main() { s ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- linux shell编程进阶学习(转)
第一节:基础 ls -lh ——可以用户友好的方式看到文件大小 file 文件名 ——查看文件类型 stat 文件名 ——查看文件当前状态 man 命令/函数名 ——查看详细的帮助文档 man中看某 ...
- Linux下C语言编程基础学习记录
VIM的基本使用 LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...
- Linux Unix shell 编程指南学习笔记(第三部分)
第十三章 登陆环境 登陆系统时.输入username和password后.假设验证通过.则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profi ...
- 《灰帽Python-黑客和逆向工程师的Python编程》学习记录
ctypes是Python语言的一个外部库,提供和C语言兼容的数据类型,可以很方便的调用C DLL中的函数. 操作环境:CentOS6.5 Python版本:2.66 ctypes是强大的,强大到本书 ...
- android adb shell and monkey 学习记录
Monkey环境: android SDK and JDK SDK目录下的platform-tools和tools目录要配置环境变量 查看版本: ADB 的安装这里就不多说了,输入以下命令有如下提示就 ...
- Linux Unix shell 编程指南学习笔记(第四部分)
第十六章 shell脚本介绍 此章节内容较为简单,跳过. 第十七章 条件測试 test命令 expr命令 test 格式 test condition 或者 [ conditio ...
随机推荐
- traefik 结合 docker-compose 的快速安装及使用
traefik 介绍 traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具. 它支持多种后台 (Docker, Swarm, Kubernetes, Maratho ...
- js 原型,原型链,原型链继承浅析
对于网上的关于原型,原型链和原型链继承的晦涩语言说明就不累赘了,复制粘贴过来再解释一遍怕自己也整蒙了,本人最怕空气突然安静,四目对视,大眼对小眼,一脸懵逼. 我们先看下面
- RFID和QRCODE对比
1.技术介绍 1.1 RFID 射频识别,RFID(Radio Frequency Identification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而 ...
- python3 完全理解赋值,浅copy,深copy 通过地址详细理解~
额...老规矩,先来一天NLP再说,也没几条了. 十,在任何一个系统里,最灵活的部分是最能影响大局的部分 灵活便是有一个以上的选择,选择便是能力,因此最灵活的人便是最有能力的人. 灵活来自减少只相信自 ...
- [计算机视觉]100行python实现摄像机偏移、抖动告警
背景 在实际项目中,利用深度学习在检测道路车辆并分析车辆行为时,需要按照事先规定的方法绘制检测区(包含道路方向.车道区域等).由于各种原因(人为.天气),获取视频数据的摄像角度容易偏移原来设定的位置, ...
- notepad++ 快速运行PHP代码
notepad++ 运行PHP代码 1. 按下快捷键 F52. 将输入如下命令 cmd /k D:\xampp\php\php.exe "$(FULL_CURRENT_PATH)" ...
- Linux常用命令速查-汇总篇
Linux常用命令速查-用户管理 Linux常用命令速查-文件管理 Linux常用命令速查-系统监控 Linux常用命令速查-网络管理 Linux常用命令速查-定时任务 Linux常用命令速查-Vim
- golang中Context的使用场景
golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...
- 《HelloGitHub》第 29 期
公告 月刊现已支持 RSS 订阅 <HelloGitHub>第 29 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. ...
- 『集群』005 Slithice 基于 集群 的 自动容错
Slithice 基于 集群 的 自动容错 Slithice容错概述: Slithice 支持 非集群 的 独立服务端: 支持 基于 中央服务器 的 集群服务端: 支持 基于 自定义配置 的 集群服务 ...