我想通过char读取stdin char并将其与使用系统调用的不同char进行比较,我的问题是,给出代码:
#include "util.h"
#define STDOUT 1
#define STDIN 1
#define SYS_READ 3
#define SYS_WRITE 4
#define SYS_OPEN 5
#define SYS_CLOSE 6
#define SYS_LSEEK 19
int main (int argc , char* argv[], char* envp[])
{
char str[512];
int fd;
if((fd= system_call(SYS_OPEN,STDIN,0, 0777))==-1){
system_call(SYS_WRITE,STDOUT,"stdin error", 11);
}
while((system_call(SYS_READ,fd, str,1))>0){
if((strncmp(";",str,1))==0){
system_call(SYS_WRITE,STDOUT,str, 1);
system_call(SYS_WRITE,STDOUT,"\n", 2);
}
else{
system_call(SYS_WRITE,STDOUT,str, 1);
}
}
return 0;
}
我有一个汇编文件可以转为:" system_call(SYS_WRITE,STDOUT," \ n",2);"来写(...);
现在的问题是,我不知道如何让它等待输入,所以它永远不会启动while循环,因为它没有从输入开始读取东西。< / p>
编辑,系统调用的代码:
system_call:
push ebp ; Save caller state
mov ebp, esp
sub esp, 4 ; Leave space for local var on stack
pushad ; Save some more caller state
mov eax, [ebp+8] ; Copy function args to registers: leftmost...
mov ebx, [ebp+12] ; Next argument...
mov ecx, [ebp+16] ; Next argument...
mov edx, [ebp+20] ; Next argument...
int 0x80 ; Transfer control to operating system
mov [ebp-4], eax ; Save returned value...
popad ; Restore caller state (registers)
mov eax, [ebp-4] ; place returned value where caller can see it
add esp, 4 ; Restore caller state
pop ebp ; Restore caller state
ret ; Back to caller
我最终解决了STDIN的问题(定义已关闭),并且没有定义fd来接收值并且它最终工作,不确定为什么到目前为止,我猜测fd被设置为非阻塞。
答案 0 :(得分:1)
您将STDIN定义为1,当它应为0. 1是STDOUT,因此您尝试从仅用于写入的文件句柄中读取。