如果您已阅读所有文件,则必须保留,因为在第一时间读取的内容将...已阅读,而这不是您想要的。

注释后编辑代码:

#include

#include

#include

#include

#include

#include

#include

bool WriteLineFromFile(int dst, int src, bool *srcTerminated)

{

int lastChar = EOF;

char currentChar;

ssize_t nbCharRead;

ssize_t nbCharWrite;

do {

if ((nbCharRead = read(src, &currentChar, 1)) < 0) {

fprintf(stderr, "%s : read(src, &buf, 1) : src=%d, errno='%s'.\n", __func__, src, strerror(errno));

return (false);

}

// End of file

if (nbCharRead == 0) {

(*srcTerminated) = true;

// Adding '\n' if necessary

if (lastChar != '\n' && lastChar != EOF) {

currentChar = '\n';

while ((nbCharWrite = write(dst, &currentChar, 1)) != 1) {

if (nbCharWrite < 0) {

fprintf(stderr, "%s : write(dst, &buf, 1) : dst=%d, errno='%s'.\n", __func__, dst, strerror(errno));

return (false);

}

sleep(1);

}

}

return (true);

}

// Writing a char into the dst file

while ((nbCharWrite = write(dst, &currentChar, 1)) != 1) {

if (nbCharWrite < 0) {

fprintf(stderr, "%s : write(dst, &buf, 1) : dst=%d, errno='%s'.\n", __func__, dst, strerror(errno));

return (false);

}

sleep(1);

}

lastChar = currentChar;

} while (currentChar != '\n');

return (true);

}

bool FileMerging(char *inputPathFile1, char *inputPathFile2, char *outputPathFile)

{

int inputFile1 = -1;

bool file1Terminated = false;

int inputFile2 = -1;

bool file2Terminated = false;

int outputFile = -1;

bool returnFunction = false;

// Openning all the file descriptor

if ((inputFile1 = open(inputPathFile1, O_RDONLY)) == -1) {

fprintf(stderr, "%s : open(inputPathFile1, O_RDONLY) : inputPathFile1='%s', errno='%s'.\n", __func__, inputPathFile1, strerror(errno));

goto END_FUNCTION;

}

if ((inputFile2 = open(inputPathFile2, O_RDONLY)) == -1) {

fprintf(stderr, "%s : open(inputPathFile2, O_RDONLY) : inputPathFile2='%s', errno='%s'.\n", __func__, inputPathFile2, strerror(errno));

goto END_FUNCTION;

}

if ((outputFile = open(outputPathFile, O_WRONLY | O_CREAT, 0644)) == -1) {

fprintf(stderr, "%s : open(outputPathFile, O_RDONLY) : outputPathFile='%s', errno='%s'.\n", __func__, outputPathFile, strerror(errno));

goto END_FUNCTION;

}

// Alternativly print a line from inputFile1 and inputFile2 to outputFile

do {

if (!file1Terminated) {

if (!WriteLineFromFile(outputFile, inputFile1, &file1Terminated)) {

goto END_FUNCTION;

}

}

if (!file2Terminated) {

if (!WriteLineFromFile(outputFile, inputFile2, &file2Terminated)) {

goto END_FUNCTION;

}

}

} while (!file1Terminated || !file2Terminated);

returnFunction = true;

/* GOTO */END_FUNCTION:

if (inputFile1 != -1) {

close(inputFile1);

}

if (inputFile2 != -1) {

close(inputFile2);

}

if (outputFile != -1) {

close(outputFile);

}

return (returnFunction);

}

int main(int argc, char *argv[])

{

if (argc != 4) {

fprintf(stderr, "This program wait 3 arguments on the command-line : inputFilePath1 inputPathFile2 outputPathFile.\n");

return (EXIT_FAILURE);

}

if (!FileMerging(argv[1], argv[2], argv[3])) {

return (EXIT_FAILURE);

}

return (EXIT_SUCCESS);

}

linux合并两个文件 去重复,c - 在Linux中使用C,通过系统调用将两个文本文件合并为一个新文件(来回换行) - 堆栈内存溢出...相关推荐

  1. Spark-RDD使用IDEA-Scala编程练习题:对于两个输入文件A和B,编写spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件c。

    一.例题 对于两个输入文件A和B,编写spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件c.下面是输入文件和输出文件的一个样例,供参考. 输入文件A的样例如下: 2017 ...

  2. python现有两个磁盘文件a和b_有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中Python实例...

    有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中Python实例 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并( ...

  3. 假设Linux系统中不存在文件newfile,现要创建一个新文件newfile,以下哪个命令无法实现该功能。...

    要创建一个新文件newfile,可以使用Linux系统中的touch命令.例如: touchnewfile 这样就可以在Linux系统中创建一个名为newfile的空文件了. 如果使用的是cp命令,那 ...

  4. 用python创建一个新文件_Python创建文件和追加文件内容实例

    一.用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: 代码如下: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 &g ...

  5. linux集群中删除的文件去哪里找回,恢复Linux误删除文件系列之extundelete工具

    下载安装 extundelete 之前要安装两个软件包 e2fsprogs 和 e2fsprogs-libs 安装顺序:e2fsprogs --> e2fsprogs-libs --> e ...

  6. java 两个数组去重复数据_Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现, ...

  7. linux排序语言,Linux sort 排序命令uniq去重复行

    sort命令 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语 ...

  8. 将文件中所有数读到一个数组中_「数据结构与算法」将5个文件中的一千万年龄合并到一个新文件中...

    现在有5个文件,文件里面分别存储着1千万个用户年龄,并且每个文件中的年龄都是有序的(从小到大),现在需要将这5个文件整合到一个文件中,新文件的内容依然要保持有序(从小到大). 初始化数据 1.数据生成 ...

  9. 如何为linux 桌面文件内存,linux - 桌面Linux发行版中.desktop文件的功能是什么? - 堆栈内存溢出...

    我有以下情况:我必须修改一个.desktop文件,该文件位于我正在使用的应用程序的包中. 当我尝试打开文件的内容时,我遇到了一个奇怪的问题. 如果我点击它然后我尝试点击"打开"它给 ...

最新文章

  1. 了解下RDF Schema (RDFS)
  2. leetcode算法题--设计链表
  3. 化工原理各章知识点汇总
  4. boost::hana::partition用法的测试程序
  5. linux重启后地址不是之前设置的静态地址的解决方案
  6. 设计模式-行为型模式-责任链模式
  7. yii 执行指定迁移文件_laravel的迁移文件
  8. 前端安全问题及解决办法
  9. Linux音频驱动-PCM设备
  10. c语言质数咋求,C语言求质数的方法
  11. termios结构体详解
  12. 2021年度盘点|民宿发展"春水涌动"
  13. vc code 必备插件Code Runner详解及问题
  14. WPS广告弹窗永久关闭
  15. email地址格式怎么设置?申请个人电子邮件地址怎么写?
  16. android root写入文件,android中root用户无法往某些目录写入文件解决方法
  17. linux编译n2n v2,重新编译N2N
  18. (LeetCode1044)最长重复子串:给出一个字符串S,返回其最长重复子串
  19. python 实现发送手机短信验证码后台方法
  20. 五款优质资源网站 每一个都让你欲罢不能

热门文章

  1. VTK修炼之道15:图像处理_显示(vtkImageViewer2 vtkImageActor)
  2. PIC单片机精通_串口通信模块C实现
  3. ASP.NET开发要抛弃ASP旧习和破烂
  4. javascript 中this 的用法:
  5. 显存文本模式详解 ———《x86汇编语言:从实模式到保护模式》读书笔记补遗02
  6. 操作系统(十二)线程的实现方式、多线程模型
  7. MPU6050开发 -- 进阶之I2C/SPI通信协议
  8. Java泛型详解,通俗易懂只需5分钟
  9. Android O 前期预研之一:Android Treble 计划
  10. Android Linker学习笔记