基于linux的C语言

目录

一,多文件编程

二,文件IO

       1, 文件的打开:open

               1.1, 只打开文件

               1. 2,创建且打开文件

        2,读文件:read 从打开的⽂件中读取⽂件内容,然后输⼊到程序中去。

        3,写入文件:write从程序中把内存数据写⼊到⽂件中,程序输出到⽂件中。

        4,关闭文件:close把打开的⽂件关闭

        5,设置文件偏移位置:lseek

三,目录操作

        1,创建目录文件

        2,删除目录文件

        3,打开目录文件

        4,关闭目录文件

四,字符串的操作

        1,字符串的比较

                1.1,比较全部字符串

                1.2,比较前n个字符串

        2,字符串的追加

                2.1,将整个字符串内容添加到该字符串最前位置

                2.2,将这个字符串中的前n个字符内容串添加到该字符串

        3,字符串的拷贝

                3.1,复制整个字符串内容粘贴到这个字符串,覆盖原字符串中所有的内容

                3.2, 复制字符串中前n个字符串内容粘贴到原字符串,原字符串中的全部内容都会被覆盖。

        4,字符串的长度

五,标准IO

        1,文件的打开:fopen

        2,文件的关闭:fclose

        3,文件的写入:fwrite

        4,文件的读取:fread

                 4.1,刷新缓冲区:fflush

                 4.2,判断文件是否出错,是否读完

        5,字符的读取

                5.1,单个字符的读取

                5.2,单个字符的写入

                5.3,一个字符串的读取

                5.4,一个字符串的写入



IO文件系统

名词解释:

        io:即input,output,文件的读写。

一,多文件编程

        即用一个程序源代码把具有相同功能的程序添加在这个文件中,这就叫多文件编程。

        编译机制:

                ① 预处理:gcc -E 文件名.c -o 文件名.i        

                ②  编译:gcc -s 文件名.i -o 文件名.s  

                ③ 汇编:gcc -C文件名.s -o 文件名.o

                ④ 链接:gcc 文件名.O

        头文件:用于多文件书写时的声明。

        头文件的格式:#include<xxx.h>或者#include"xxx.h"。注:""表示其他路径,<>表示当前路径的声明。

        注:虽然是多文件编程但是在链接前各个步骤都是分别进行的,只是在运行程序时进行链接。

        预处理命令:在编译过程中,在预处理阶段执行某一段操作,不执行其他段的代码。

                格式        #if

                                #else

                                ..............

                                #endif

        宏定义:用当前的值代替其他的值区别于类型替换(typedef)

                格式:#define n 10,即用n代表10。

        注:宏定义同样只能执行替换一个语句,(即执行一个分号之前的语句)如果要同时使用多个语句可以使用do while语句或者把多个语句通过添加{ };进行更改。

        do  while 语句:第一次条件不做判断,从第二次开始执行判断。

                格式:do

                        {

                        }while();

二,文件IO

        程序操作磁盘上的文件就是对文件的读写操作

        读:将磁盘中的文件放入到程序中来——>输入

        写:将程序中的文件存放在磁盘中去——>输出

文件的操作

        函数名含义的查看:man +函数名。

       1, 文件的打开:open

               1.1, 只打开文件

//要使用open 这个函数就必须对其声明。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//打开⽂件
int open(const char *pathname, int flags);
/*
参数1:
    const char *pathname:字符指针,表⽰的是字符的地址,字符串的⾸地址,要打开的⽂件路径字符串的地址.
    const:表示指向的指针地址可以进行修改。
参数2:
    int flags:整数,打开⽂件的选项
        O_RDONLY:只读
        O_WRONLY:只写
        O_RDWR:读写
        O_TRUNC:清空⽂件(在有 写 ⽅式 有效)
        O_APPEND:追加⽂件(在有 写 ⽅式 有效),在写⽂件时,在⽂件末尾位置添加写
        O_CREAT:如果⽂件不存在则,创建⽂件,存在则直接打开。
返回值:
    成功返回>=0
    失败返回-1
*/

               1. 2,创建且打开文件

int open(const char *pathname, int flags, mode_t mode);

        2,读文件:read 从打开的⽂件中读取⽂件内容,然后输⼊到程序中去。

//文件声明
#include <unistd.h>

//格式:
ssize_t read(int fd, void *buf, size_t count);

/*
从指定的fd(打开的⽂件中,读取count个字节数据,存放到程序的内存buf地址开始位置)

参数1:
    int fd:⽂件描述符,表⽰打开的⽂件
参数2:
    void *buf:指针,表⽰把从⽂件中读取的内容,存放到程序指定的内存地址中
参数3:
    size_t count:整数,表⽰从⽂件中读取多少个字节的数据内容
返回值:
    成功:返回读取到的字节数,如果返回值为0表⽰本次读取是从⽂件末尾开始读取,没有内容
    失败:-1
*/

        3,写入文件:write从程序中把内存数据写⼊到⽂件中,程序输出到⽂件中。


#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

/*
把buf这个内存地址的中的数据,拿出 count字节数,写⼊到fd⽂件中。
参数1:
    int fd:要写⼊哪个⽂件
参数2:
    const void *buf:要写⼊的内容在哪个内存地址(把哪个内存地址的内容,写⼊⽂件)
参数3:
    size_t count:要写⼊内容的⼤⼩
返回值:
    成功:返回写⼊的字节数
    失败:返回-1
*/

        4,关闭文件:close把打开的⽂件关闭

#include <unistd.h>

int close(int fd);

/*
参数1:
    int fd:⽂件描述符,表⽰关闭哪个打开的⽂件
返回值:
    成功:返回0
    失败:返回-1
*/

注:对于程序⽽⾔,系统默认打开了终端⽂件 终端⽂件打开了三次,分别以不同的⽅式打开。

⽂件描述符如下:

                0:读打开,只读,可以读取终端⽂件内容(命令⾏输⼊的内容)

                1:写打开,只写,可以写⼊到终端⽂件(终端上显⽰)

                2:写打开,只写,以更⾼权限写,程序出错时,想⽴即显⽰

        5,设置文件偏移位置:lseek

#include <sys/types.h>
#include <unistd.h>

//重新设置⽂件当前操作位置(修改偏移位置)
off_t lseek(int fd, off_t offset, int whence);//设置打开的fd⽂件的偏移位置

/*
参数1:
    int fd:表⽰打开的⽂件,需要被设置偏移量的⽂件
参数2:
    off_t offset:整数,偏移量,表⽰偏移多少个字节
                +:正数,向⽂件末尾靠近偏移
                -:负数,向⽂件开头靠近偏移
参数3:
    int whence:基准点,表⽰从哪个位置开始计算如下
    SEEK_SET:从⽂件开始位置计算偏移
    SEEK_CUR:从⽂件当前的操作位置计算偏移
    SEEK_END:从⽂件末尾位置开始计算偏移
返回值:
    成功:返回从⽂件开始位置到新偏移之后位置⼀共多少个字节
    失败:返回-1
*/

注:位置偏移可以超过当前⽂件⼤⼩,超过的文件大小的文件叫做空洞⽂件,中间空洞部分每个字节都 会补'\0'

三,目录操作

        1,创建目录文件

        命令:mkdir   在指定⽬录中创建⼀个⽬录⽂件

//头文件
#include <sys/stat.h>
#include <sys/types.h>

//格式:
int mkdir(const char *pathname, mode_t mode);

/*
参数1:
    const char *pathname:指针,字符串⾸地址,要创建的⽬录⽂件的路径
参数2:
    mode_t mode:创建的⽬录的权限(读写执⾏)
返回值:
    成功:返回0
    失败:返回-1
*/

举例说明:

        2,删除目录文件

        命令:rmdir   删除指定位置的文件目录

//头文件
#include <unistd.h>

//格式
int rmdir(const char *pathname);
/*
参数:
    const char *pathname:字符串⾸地址,表⽰要删除的⽬录
返回值:
    成功:返回0
    失败:返回-1
*/

举例说明:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于您所提到的问题,我能够给您一些基本的思路和实现方法。管道通信是Linux系统中一种非常常见的进程间通信方式,可以实现不同进程之间数据的传输和共享。下面是一份基于Linux C语言的管道通信例程,您可以参考一下: 1. 父进程创建一个管道,通过fork()函数创建一个子进程来读取管道中的数据。 ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(){ int fd[2]; pid_t pid; char buffer[20]; //创建管道 if(pipe(fd)<0){ printf("Create pipe error!\n"); exit(1); } //创建子进程 pid = fork(); if(pid < 0){ printf("Create process error!\n"); exit(1); }else if(pid == 0){ //子进程读取管道中的数据 close(fd[1]); int n = read(fd[0], buffer, sizeof(buffer)); printf("Child process received: %s\n", buffer); close(fd[0]); }else{ //父进程向管道中写入数据 close(fd[0]); char* data = "Hello, child process!"; write(fd[1], data, sizeof(data)); printf("Parent process sent: %s\n", data); close(fd[1]); } return 0; } ``` 2. 父进程向管道中写入数据,子进程进行读取并输出。 以上面的代码为例,首先父进程通过pipe()函数创建了一个管道fd,接着通过fork()函数创建了一个子进程,并通过pid变量来判断当前进程是否为父进程或子进程。在父进程中,我们先关闭了管道的读端,然后通过write()函数向管道中写入了数据"data",并输出了发送成功的信息。在子进程中,我们先关闭了管道的写端,然后通过read()函数从管道中读取数据到buffer缓冲区中,并输出读取的结果。 这就是一个简单的基于Linux C语言的管道通信例程实现方法。当然,具体实现方法还需要根据实际情况进行调整,但是我们通过这个例子可以清晰地了解到管道通信的基础原理和实现方法,希望能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值