在我的虚拟盒子Ubuntu图片下,我在玩C语言的开放和写系统调用,得到了我有过的最有趣的错误!
基本上,我从open获得一个文件描述符,并将来自write函数的输入写入一个.txt文件。用户告诉open函数在哪里查找文件/在哪里创建文件。
如果文件还没有创建,open将为我创建它
如果已经存在,我将把输入追加到文件的末尾

int main(int argc, char* argv[]{
int fd;
int bytesWritten;

//open and create file if it's not been created yet
fd = open(argv[1], O_CREAT|O_WRONLY|O_APPEND , S_IRWXU);
if(fd == -1){
    perror("Open error:\n");
    exit(EXIT_FAILURE);
}

bytesWritten = write(fd,"Hello mate!\n",20);
if(bytesWritten == -1){
    perror("Write error:\n");
    exit(EXIT_FAILURE);
}
//fysnc
return 0;}

如果我将输出打印到stdout(1)(将fd更改为1),我将得到预期的结果:
你好,伙计!
但是,如果我像上面所示那样写作,事情会变得很奇怪(而且很有趣)
c - 有趣的写SysCall错误:在.txt中打印汉字-LMLPHP
它让我笑了,文件被创建,如果我执行程序几次,文件将开始增长和增长。
顺便说一句,我是这样执行程序的:
./copy/home/b/Desktop/Examples/U3/test.txt文件
我不得不承认这是一个相当有趣的副作用,但为什么会发生这种情况,我如何解决这个问题?
只是好奇

最佳答案

好吧,伙计们,我刚找到解决办法,我不得不为浪费你们的时间道歉。。。
我的搭档重新命名了文件所在的文件夹(比如从3到U3),然后按回车键。这种破坏的文件编码。。。
在另一个新文件夹中创建源文件可以解决此问题。。

09-05 14:17