Linux IO chatter

本文提供了一个简单的文件通信程序示例,展示了如何通过读写特定文件来进行消息传递。程序包括两个部分:一方负责从文件中读取消息并显示,另一方则负责向文件中写入消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>   
#include <sys/types.h>  
#include <sys/stat.h>  
#include <errno.h>  
#include <string.h> 
/*


struct user{
    char name[10];
//    int num;
//    int age;
    char msg_send[80];
char msg_recv[80];
}boya,boyb,*pp,*qq;
*/
int main(void){
    int fp1,fp2;
char name_a[20],name_b[20] ;
char buf_recv[30];
char buf_send[30];
//  char ch;
   // int i;
int m,n;
 //   pp=boya;
  //  qq=boyb;
    


    printf("\n please input your name and your friend name \n");
scanf("%s %s",name_a,name_b) ;
//printf("your name is %s", boya->name");
while(1)
{
//open the file recv_b
if((fp1=open("note_recv_b.txt",O_RDWR|O_CREAT|O_APPEND))== 0){
        printf("Cannot open file note_recv_a any key exit!");
        getchar();
        exit(1);
}

//if new message comes


//read message from B
m = read(fp1,buf_recv,sizeof(buf_recv));//read from file note_recv_b
//
if(m > 0)
{
//print message from B
printf("hello %s,your get message from %s: \n ",name_a,name_b) ;
// print message on screen
write(STDOUT_FILENO,buf_recv,m);//print to screen
close(fp1);
}
else
{
if((fp2=open("note_recv_a.txt",O_RDWR|O_CREAT|O_APPEND))== 0){
printf("Cannot open file note_recv_a any key exit!");
getchar();
exit(1);
}
printf("\n you can send message to your friend %s :\n",name_b);
scanf("%s\n",buf_send);
//n = read(STDIN_FILENO,buf_send,30);//read send msg 
//move fp2 back 30 offset
// lseek(fp2,30,SEEK_SET);
write(fp2,buf_send,sizeof(buf_send));//write to note_recv_a
//close file
printf("you have send message to B:%s \n",buf_send);
//fclose(fp2);

  close(fp2);

}
//move fp to the end of file
//lseek(fp1,30, SEEK_SET);



//close file
//close(fp1) ;
//open note_recv_a to send message to B




}



/*
    for(i=0;i<1;i++,pp++)
        scanf("%s %s",boya->name,boya->,);
    pp=boya;
    fwrite(pp,sizeof(struct user),2,fp);
    rewind(fp);
    fread(qq,sizeof(struct user),2,fp);
    printf("\n\nname\tnumber      age      addr\n");
    for(i=0;i<2;i++,qq++)
printf("%s\t%5d%7d     %s\n",qq->name,qq->num,qq->age,qq->addr);
    fclose(fp);
*/
return 0 ;
}
<think>好的,用户问的是Linuxchatter,但可能他是指chattr命令,因为chatterLinux中并不存在。首先需要确认用户是否有拼写错误。通常,chattr是用于更改文件属性的命令,比如设置文件不可修改、追加等。用户可能想了解如何保护文件不被修改或删除,或者在系统管理中遇到相关问题。 接下来,我需要回忆chattr的基本用法和常见属性。比如+i属性可以让文件不可修改、不可删除,+a允许追加但不修改,这些对于系统安全或日志文件管理很有用。需要举几个例子说明如何使用,以及注意事项,比如需要root权限,否则无法操作。 还要考虑用户可能的实际应用场景,比如防止日志被覆盖,或者保护配置文件。同时提醒用户谨慎使用,特别是对系统关键文件随意设置属性可能导致问题。最后,确认回答是否解决了用户的问题,或者是否需要进一步的信息。</think>您可能指的是 Linux 中的 `chattr` 命令(而不是 "chatter")。`chattr` 是 **change file attributes** 的缩写,用于修改文件或目录的底层属性,这些属性可以控制文件系统的特殊行为,例如防删除、防修改等。 --- ### 核心功能 通过 `chattr` 设置的属性比常规权限(`chmod`)更底层,常用于系统加固或特殊场景保护文件。 --- ### 常用属性 1. **`i` (immutable) 不可变属性** - 文件:禁止修改、删除、重命名、创建硬链接 - 目录:禁止新增/删除文件,禁止修改目录内文件 - 示例:`sudo chattr +i /etc/passwd`(保护系统文件) 2. **`a` (append-only) 仅追加** - 文件:只能追加内容,不能修改/删除现有内容 - 目录:允许新建文件,但文件自动继承 `+a` 属性 - 示例:`sudo chattr +a /var/log/auth.log`(保护日志) 3. **`A` (no atime updates)** - 禁用文件的访问时间(atime)更新,减少磁盘写入 4. **`e` (extent format)** - 默认启用,表示文件使用 ext4 的 extent 结构存储 --- ### 使用方法 ```bash # 添加属性 sudo chattr +[属性] 文件名 # 移除属性 sudo chattr -[属性] 文件名 # 查看属性 lsattr 文件名 ``` --- ### 典型案例 1. **保护敏感配置文件** ```bash sudo chattr +i /etc/ssh/sshd_config ``` 防止 SSH 配置被意外修改或恶意篡改。 2. **日志防覆盖** ```bash sudo chattr +a /var/log/nginx/access.log ``` 确保日志只能追加,避免被清空。 --- ### 注意事项 - 需要 `root` 权限操作 - 滥用 `+i` 可能导致系统更新失败(如锁定软件包管理的文件) - 属性优先级高于常规权限,即使文件有 `777` 权限,`+i` 仍会阻止修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值