在我的虚拟盒子 Ubuntu 镜像下,我正在尝试用 C 语言编写 open 和 write 系统调用,结果遇到了我遇到过的最有趣的错误!
基本上,我从打开中获取一个文件描述符,并将来自写入函数的输入写入 .txt 文件。用户告诉打开函数在哪里寻找文件/在哪里创建文件。
- 如果文件还没有创建,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),我将得到预期的结果:
Hello mate!
但是,如果我像上面那样使用 write,事情就会变得很奇怪(而且很有趣)
这让我笑了,文件被创建了,如果我执行程序几次,文件就会开始越来越大。
顺便说一句,我这样执行程序:
./copy /home/b/Desktop/Examples/U3/test.txt
我不得不承认这是一个非常有趣的副作用,但为什么会发生这种情况,我该如何解决呢?
只是好奇
最佳答案
好的你们,我刚刚找到了解决这个问题的方法,我不得不为浪费你们的时间而道歉......
我的合作伙伴重命名了文件所在的文件夹(例如从 Ü3 到 U3)并按 Enter。这种破坏文件编码...
在另一个新文件夹中创建源文件可以解决问题..
关于c - 搞笑写SysCall错误: Prints chinese characters in . txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40339840/