日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/3/15 linux 39 豆豆

如果您已閱讀所有文件,則必須保留,因為在第一時間讀取的內容將...已閱讀,而這不是您想要的。

注釋后編輯代碼:

#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);

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的linux合并两个文件 去重复,c - 在Linux中使用C,通过系统调用将两个文本文件合并为一个新文件(来回换行) - 堆栈内存溢出...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。