使用C中的read()从stdin读取

时间:2014-03-27 10:22:30

标签: c stdin system-calls

我想通过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被设置为非阻塞。

1 个答案:

答案 0 :(得分:1)

您将STDIN定义为1,当它应为0. 1是STDOUT,因此您尝试从仅用于写入的文件句柄中读取。