【linux程序设计4th】第三章1

makefile

.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g

###replace your bin
BIN=simple_write simple_read copy_system

all:$(BIN)
%.o:%.c
	$(CC) $(CFLAGS) -c $< -o  [email protected]
clean:
	rm -f *.o $(BIN)

simple_write.c

/*
    #include <unistd.h>
    ssize_t write(int fd, const void *buf, size_t count);

    #include <string.h>
    size_t strlen(const char *s);

*/
/*unistd.h头文件必须放在前面,
  它定义了posix有关的标志会影响到其他头文件
*/
#include <unistd.h>
#include <string.h>

int main()
{
    char *str="第一次测试write函数\n";
    int n=strlen(str);

    if(write(1,str,n) != n)
        write(2,"error\n",6);
    return 0;
}

simple_read.c

/*
    //man 3 exit
    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);

    #include <stdlib.h>
    void exit(int status);

*/
#include <stdlib.h>
#include <unistd.h>

int main()
{
    char buf[1024];
    int nread;
    nread=read(0, buf, 1024);
    if(nread == -1){
        write(2,"error\n",sizeof("error\n"));
        exit(-1);
    }
    if(write(1,buf,nread) != nread){
        write(2,"error\n",sizeof("error\n"));
        exit(-1);
    }
    return 0;
}

/*======================================+
                                        +
[[email protected] 3rd]$ ./simple_read      +
hello world                             +
hello world                             +
[[email protected] 3rd]$ ./simple_read      +
hello    world                          +
hello    world                          +
[[email protected] 3rd]$                    +
                                        +
注意 空格,制表,回车                      +
管道命令 echo "hello" | ./simple_read    +
========================================*/

copy_system.c

/*
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);

#include <unistd.h>
int close(int fd);

#include <sys/ioctl.h>
int ioctl(int d, int request, ...);
*/
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
    char c;
    int in, out;

    in = open("file.in", O_RDONLY);/*file.in自己准备*/
    out=open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
    while(read(in, &c, 1)==1)
        write(out,&c, 1);

    return 0;
}

主要几点需要记住

1.  unistd.h头文件必须放在前面,它定义了posix有关的标志会影响到其他头文件。

2.  对文件,管道命令的理解

3. sizeof()和strlen() 对字符串求长度有点区别

4. read() write() 对空格 制表符 回车换行的处理

2016年11月23日22:54:51

时间: 2024-10-21 12:43:53

【linux程序设计4th】第三章1的相关文章

《JAVASCRIPT高级程序设计》第三章

<JAVASCRIPT高级程序设计>第三章主要讲述了这门语言的基础概念,内容多而浅,通过思维导图可以帮助我们很好的理清脉络. js函数使用function关键字来声明,以下是一个简单的例子: 1 function sayHi(name, message){ 2 alert("hello," +name + message); 3 } 函数中可以使用return语句指定返回值,如果只有“return;”,则函数在停止执行后,将返回undefined; 定义的函数有2个参数,那

Linux内核分析——第三章 进程管理

第三章 进程管理 3.1 进程 1.进程就是处于执行期的程序:进程就是正在执行的程序代码的实时结果:进程是处于执行期的程序以及相关的资源的总称:进程包括代码段和其他资源. 线程:是在进程中活动的对象. 2.执行线程,简称线程,是在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 3.内核调度的对象是线程,而不是进程.Linux对线程并不特别区分,视其为特殊的进程 4.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.在线程之间可以共享虚拟内存,但每个都拥

201671010105 2016-2017-2《Java程序设计》第三章学习心得

通过学习第三章,我的总结有以下几点: 先说内容,第三章我们主要学习的是java的基本程序设计结构,学习了与之相关的一些内容,注释,数据类型,变量,运算符,字符串,输入输出语句,数组等等,在这些内容中,有些是在C语言中同样可以学到的,我们上学期已经学过,但也有很多是与c不一样的,是首次接触,比如注释,无论是java还是c语言,对于编程者而言,给自己编写的程序注释是一种良好的习惯,不止自己看懂,别人也能看懂,又比如数据类型,java中多了byte(字节型)和boolean(布尔型).在后面内容中也有

linux读书笔记第三章

第3章 进程管理20 3.1 进程20 进程就是处于执行期的程序(目标码存放在某种存储介质上),但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程.当然还包括用来存放全局变量的数据段等,实际上,进程就是正在执行的程序代码的实时结果,内核需要有效而又透明地管理所有细节. 执行线程,简称线程,是在进程中活动的对象,每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器,内核

【Linux原理】第三章目录和文件管理(一)

"命令"严格一点来说,通常只代表了实现某一类功能的指令或程序的名称. 一.Linux命令的执行必须依赖于shell命令解释器,它位于操作系统内核与用户之间,负责接收用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,充当翻译官的角色. Bash是Linux系统中默认使用的shell程序,文件位于/bin/bash.根据Linux命令和shell程序的关系,一般分为以下两种类型: →内部命令:指的是集成与shell解释器程序内部的一些指令. →外部命令:指的是属于shell解释

Linux内核分析——第三章 进程调度

第四章 进程调度 4.1 多任务 1.多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 2.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. 3.多任务系统分类: (1)非抢占式多任务 (2)抢占式多任务 4.Linux提供了抢占式的多任务模式.在此模式下,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会.这个强制的挂起动作叫做抢占.进程被抢占之前能够运行的时间是预先设置好的,叫进程的时间片.时间片实

JavaScript高级程序设计:第三章

基本概念 一.语法: 1.区分大小写: 2.标识符:指变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格式规则组合起来的一个或多个字符: (1)第一个字符必须是一个字母.下划线(_).或者一个美元符号($); (2)其他字符可以是字母.下划线.美元符号或数字. 概括地说,标识符就是首字母不能是数字的,以字母.数字.下划线和美元符号组合的一个或多个字符. 3.注释: (1)单行注释以双斜杠开头: //单行注释. (2)块级注释以/*..*/包围: /* 这是一个 * 块级注释 */ 4

《erlang程序设计》第三章基本概念学习

变量 变量必须以大写字母开头.在erlang里,变量就像数学里的那样.当关联一个值与变量时,所下的是一种断言,也就是事实的陈述.这个变量就是那个值,仅此而已. 对X=1234这个简单语句所带有的两种假设. 首先, X不是一个变量,不是你习惯的Java和C等语言里的概念 其次,=不是一个赋值操作符,而是一个模式匹配操作符. 即对于 "Lhs = Rhs"这样一个式子.其先对Rhs求值,再将其结果与左端Lhs进行模式匹对. 在erlang里,变量获得值是一次成功模式匹配的操作结果. 二.

javascript高级程序设计---第二、三章

在HTML中引用javaScript javascript的几个属性  type async(异步加载 只适用于外部JS且IE8以上 HTML5规范 先于load执行) src defer(延迟加载 只适用于外部加载 先于load执行) 在HTML中使用外部JS代码的优点,1.便于维护 ,2.可缓存.3.适应未来. 在javascript中区分变量的大小写 比如(test 和 Text是?的两个变量) 在ECMA5中新模式,严格模式  'use strict'在js代码中加入这句话即为严格模式