我有一个exec文件,我知道有一个(或更多)字符串" coolyo"在其中,需要复制此文件并替换" coolyo"的所有外观。与我的计划收到的论点"使用系统调用。 我有一个条目和system_call函数用汇编语言编写。
然而,当我把我的论点写成与#34; coolyo"相同长度的东西时。 (6),它有效,一切都很好,它取而代之。如果我输入一个参数来替换" coolyo"如果长度小于或大于6,则在尝试运行文件时会出现分段错误。
有什么问题?
在途中,还有两个问题:
系统调用sys_read
和sys_write
根据收到/发送的字节数更改文件指针? (如果是的话,不应该有问题!但有!)
当我做sys_read 5个字节,然后重新做sys_read 5个字节,第一次调用后,文件指针在哪里?在5号?还是在1号?意思是,第二个sys_read是从文件[1]还是文件[4]中读取的?
我的代码:
int filePtr=-1;
while(filePtr!=0) {
char buf[6];
filePtr=system_call(SYS_READ,newfile,buf,6);
if(strcmp(buf,"coolyo")==0) {
system_call(SYS_WRITE,fd,argv[1], strlen(argv[1]));
system_call(SYS_LSEEK,fd,strlen(argv[1]) - 5, 1);
}
else
system_call(SYS_WRITE,fd,buf,5);
}
答案 0 :(得分:5)