c - 搞笑写SysCall错误: Prints chinese characters in . txt

标签 c file-io system-calls ubuntu-16.04

在我的虚拟盒子 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,事情就会变得很奇怪(而且很有趣) Error

这让我笑了,文件被创建了,如果我执行程序几次,文件就会开始越来越大。

顺便说一句,我这样执行程序:

./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/

相关文章:

c - AES加密结果只有部分数据正确(使用mcrypt lib)

复制从文件中读取的字符串并将其存储在二维字符串数组中

python - 在 Python 中读取大文件的惰性方法?

c - 如何 fread() 结构?

linux - 如何在sys_create中设置权限

system-calls - Armv8 的 Linux 系统调用约定

linux-kernel - 为什么使用 strace 只捕获一次系统调用(getpid)?

c - 指针的内存分配

c - 样板 CRT 函数 matherr 有什么意义?

C# - 从 Directory.GetDirectories() 和 Directory.GetFiles() 中排除目录和文件