Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作

read系统调用测试

/*************************************************************************
	> File Name: read.c
	> Author:
	> Mail:
	> Created Time: Tue 10 Feb 2015 01:23:58 AM PST
 ************************************************************************/

#include<stdio.h>
#include<unistd.h>
#include<errno.h>
//利用管道测试程序的标准输入
//echo  hello world | ./read
// ./read < a.txt
int main()
{
    char buf[128] ;
    int len ;
    //从输入流读取数据进入到buffer 如果返回-1 那么说明读取错误
    if((len=read(0,buf,128))==-1)
    {
        //错误写入标准错误输出
        write(2,"read error\n",11) ;
    }
    //将通过标准输入读取的数据通过标准输出输出到控制台
    if(write(1,buf,len)!=len)
    {
        //如果输出的长度不等于 len 说明 IO错误
        write(2,"read error\n",11) ;
    }
    exit(0);
    return 0 ;
}

write系统调用测试

/*************************************************************************
	> File Name: write.c
	> Author:
	> Mail:
	> Created Time: Tue 10 Feb 2015 12:39:05 AM PST
 ************************************************************************/

#include<stdio.h>
//Linux和 Uninx有关与系统调用的封装
#include<unistd.h>
//errno系统最后一次错误
#include<errno.h>
//通过自动打开文件句柄 1  也就是标准输出进行字符串输出
int main()
{
    if(write(1,"hello,world\n",2)!=12)
    {
        write(2,"write error!\n",13) ;
    }
   printf("ErrorNo:%d\n",errno);
   exit(0) ;
}

open系统调用测试1

/*************************************************************************
	> File Name: open.c
	> Author:
	> Mail:
	> Created Time: Tue 10 Feb 2015 02:07:54 AM PST
 ************************************************************************/

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
int main()
{
    char*filein="./in.txt" ;
    char*fileout="./out.txt" ;
    int fdin,fdout ;
    char rdChar ;
    //以只读方式打开输入文件
    if((fdin=open(filein,O_RDONLY))==-1)
    {
        write(2,"OpenError!\n",11)  ;
        return 0 ;
    }
    //打开文件 文件不存在并且创建文件文件存在 会 清空文件  并且复给 文件所有者读写权限
    if((fdout=open(fileout,O_CREAT|O_WRONLY|O_TRUNC,S_IRUSR|S_IWUSR))==-1)
    {
        //error
        write(2,"OpenError!\n",11);
        return 0 ;
    }
    //通过系统调用进行文件复制
    while(read(fdin,&rdChar,1)==1)
    {
        write(fdout,&rdChar,1) ;
    }exit(0)
    return  0 ;
}

open系统调用测试2

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/types.h>
int main()
{
    int fdin,fdout,len ;
    char buf[10] ;
    fdin=open("./in.txt",O_RDONLY);
    fdout=open("./out.out",O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR) ;
    //效率比较高的写法  尽量少调用系统调用
    while((len=read(fdin,buf,10))>0)
    {
        write(fdout,buf,len) ;
    }
    return 0 ;

lseek系统调用测试

/*************************************************************************
	> File Name: lseek.c
	> Author:
	> Mail:
	> Created Time: Tue 10 Feb 2015 05:02:51 AM PST
 ************************************************************************/

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#define STD_INPUT 0
#define STD_OUTPUT 1
#define STD_ERROR 2
//函数读取用户输出的第二个和倒数第二个字符 输入字符串大于5
int main()
{
    char input[256] ;
    int rdLen,wLen ;
    int fdwrite,fdread;
    char rdChar;
    rdLen=read(STD_INPUT,input,256);
    if(rdLen==-1)
    {
        write(STD_ERROR,"error\n",6);
        exit(0);
    }
    if((fdwrite=open("./res.txt",O_CREAT|O_TRUNC|O_WRONLY,S_IRUSR|S_IWUSR))==-1)
    {
        write(STD_ERROR,"create file error",17);
        exit(0) ;
    }
    wLen=write(fdwrite,input,rdLen);
    if(wLen==-1)
       exit(0);
    close(fdwrite) ;
    if((fdread=open("./res.txt",O_RDONLY))==-1)
       exit(0);
    lseek(fdread,1,SEEK_SET);
    read(fdread,&rdChar,1) ;
    printf("Index2:%c\n",rdChar);
    lseek(fdread,-3,SEEK_END) ;
    read(fdread,&rdChar,1);
    printf("Index-2:%c\n",rdChar);
    close(fdread) ;
    return 0 ;
}
时间: 2025-01-02 18:19:51

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误的相关文章

linux下redis与phpredis安装详解与简单操作

首先下载redis安装包 [[email protected] ~]#wget http://download.redis.io/releases/redis-3.0.2.tar.gz [[email protected] ~]# tar xzf redis-3.0.2].tar.gz [[email protected] ~]# cd redis-3.0.2 [[email protected] redis-3.0.2]#ls [[email protected] redis-3.0.2]#m

Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)

Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的. 练习printf /************************************************************************* > File Name: printf.c > Author: > Mail: > Created Time: Wed 11 Feb 2015 01:08:15 AM PST ***********************

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神的无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性. 系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个操作系统差异很大,系统调用函数的可移植性就不高.例如windows采用的系统调用的应用程序不能直接在Linux下编译运行. 之所以使用系统调用是因为系统资源

根据《linux兵书》目录 在kali上操作 第8章 Linux下的编程

第8章  浑水摸鱼:Linux下的编程 175 8.1  Linux下常用的开发工具 176 8.1.1  GCC 176 8.1.2  CVS 176 8.1.3  Perl 176 8.1.4  Linux上的Delphi--Kylix 177 8.2  Linux下的Vi文本编辑器 177 8.2.1  Vi编辑器介绍 178 8.2.2  启动Vi编辑器 179 8.2.3  显示Vi中的行号 180 8.2.4  光标移动操作 181 8.2.5  屏幕命令 182 8.2.6  文本

Linux下串口编程【转】

本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ --------------------------------------------------------- Author             :tiger-johnWebSite            :b

Linux下Socket编程

http://blog.chinaunix.net/uid-20733992-id-3450058.html 原文地址:Linux下Socket编程 作者:yulianliu1218 Linux下Socket编程 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面

linux下的 lib文件的学习思考

说到这个LIB文件,先从一个小故障说起. 某日开发说,一台测试用虚机可以PING通SSH不能连了.运维同学就赶紧去查,SSHD_CONFIG配置文件都正确啊,一点错误都没有,那为什么呢? 测试下,不管连自己还是其他机,都是报错 这里注意看,提示你有个libcom_err.so.2共享库文件找不到. 询问开发,才了解他们测试一个软件,意外删除了某个库文件. 那么在正常的相同虚机的机器查看下,再和出错的虚机比对下,发现少了2个库文件 挂载系统光盘或从正常的虚机上把这个两个文件拷贝过来,放到lib64

linux下多线程编程

最近研究mysql源码,各种锁,各种互斥,好在我去年认真学了<unix环境高级编程>, 虽然已经忘得差不多了,但是学过始终是学过,拿起来也快.写这篇文章的目的就是总结linux 下多线程编程,作为日后的参考资料. 本文将介绍linux系统下多线程编程中,线程同步的各种方法.包括: 互斥量(mutex) 读写锁 条件变量 信号量 文件互斥 在介绍不同的线程同步的方法之前,先简单的介绍一下进程和线程的概念, 它们的优缺点,线程相关的API,读者——写者问题和哲学家就餐问题. 基础知识 1. 进程和

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问